Skip to content

使用 crontab 管理 Mac 中的定时任务

Published: at 05:22 PM

三行命令我让 Mac 自动定时帮我干活。

crontab(管理者)

什么是 crontab

crontab 是一个专门用于管理 [cron 表达式](#cron 表达式(具体命令) )的工具,它可以实现定时执行任务,而不需要人的参与。它可以根据用户输入的 cron 表达式,自动按照指定的频率执行指定的任务。它简化了定时任务的管理,提高了工作效率。crontab 充当了管理员的角色,它来“发号施令”,Mac 乖乖干活。

crontab 在 Mac 中已经自带,不需要额外安装。

如何管理 crontab

  1. 查看当前正在运行的 cron 任务
# 显示与 cron 相关的进程和命令,以及它们的 PID(进程 ID)
ps -ef | grep cron
  1. 停止 cron 服务
# 暂停所有任务的执行
sudo launchctl unload /System/Library/LaunchDaemons/com.vix.cron.plist
  1. 启用 cron 服务
# 恢复所有任务的执行
sudo launchctl load /System/Library/LaunchDaemons/com.vix.cron.plist

注意:添加定时任务后,不需要先停用后启用 cron 来重新加载它。

  1. 编辑任务
# 完成编辑后,保存并关闭文本编辑器即可
crontab -e
  1. 删除任务(慎用
# 注意!!!这将删除所有 cron 任务,包括重要的系统任务!!!
crontab -r
  1. 列出任务
# 列出当前用户的所有 cron 表达式
crontab -l

cron 表达式(具体命令)

既然 crontab 是管理 cron 表达式的,那就必须要了解了解 cron 表达式了。

cron 表达式是一个时间计划的字符串,用于指定何时运行命令或脚本。每个字段代表一个时间节点,它们分别是分钟(0-59)、小时(0-23)、日(1-31)、月(1-12)、星期(0-6),它们之间用一个空格分隔。

* * * * *
- - - - -
| | | | |
| | | | +----- day of the week (0 - 6) (Sunday=0)
| | | +---------- month (1 - 12)
| | +--------------- day of the month (1 - 31)
| +-------------------- hour (0 - 23)
+------------------------- minute (0 - 59)

每个字段都代表时间的不同部分,例如,第一个字段代表分钟,第二个字段代表小时,以此类推。

字段可以使用以下符号和值:

以下是一些例子:

需要注意的是,cron 表达式的时间是基于系统时区设置的,因此请确保在编写 cron 表达式时考虑正确的时区。

实操一下

定时清理 Downloads 文件夹中下载超过 7 天的文件,直接丢进废纸篓。 这只是个简单的例子,当然你还可以用它来备份文件或数据库、定期清理系统日志文件、定期下载并备份网站数据、定期运行脚本等等。

  1. 打开终端应用程序。
  2. 输入以下命令来打开当前用户的 crontab 文件进行编辑:
crontab -e
  1. 在编辑器中添加以下行:
0 20 * * * find ~/Downloads/* -mtime +7 -exec mv {} ~/.Trash \;

这行代码的含义是:

  1. esc 键,输入 :wq,按下回车保存。

试了一下 Linux 中也适用。

参考资料