三行命令我让 Mac 自动定时帮我干活。
crontab(管理者)
什么是 crontab
crontab 是一个专门用于管理 [cron 表达式](#cron 表达式(具体命令) )的工具,它可以实现定时执行任务,而不需要人的参与。它可以根据用户输入的 cron 表达式,自动按照指定的频率执行指定的任务。它简化了定时任务的管理,提高了工作效率。crontab 充当了管理员的角色,它来“发号施令”,Mac 乖乖干活。
crontab 在 Mac 中已经自带,不需要额外安装。
如何管理 crontab
- 查看当前正在运行的 cron 任务
# 显示与 cron 相关的进程和命令,以及它们的 PID(进程 ID)
ps -ef | grep cron
- 停止 cron 服务
# 暂停所有任务的执行
sudo launchctl unload /System/Library/LaunchDaemons/com.vix.cron.plist
- 启用 cron 服务
# 恢复所有任务的执行
sudo launchctl load /System/Library/LaunchDaemons/com.vix.cron.plist
注意:添加定时任务后,不需要先停用后启用 cron 来重新加载它。
- 编辑任务
# 完成编辑后,保存并关闭文本编辑器即可
crontab -e
- 删除任务(
慎用
)
# 注意!!!这将删除所有 cron 任务,包括重要的系统任务!!!
crontab -r
- 列出任务
# 列出当前用户的所有 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)
每个字段都代表时间的不同部分,例如,第一个字段代表分钟,第二个字段代表小时,以此类推。
字段可以使用以下符号和值:
- 星号(
*
):匹配任何可能的值。 - 逗号(
,
):用于分隔多个可能的值。 - 连接号(
-
):用于指定一系列连续的值。 - 正斜杠(
/
):用于指定间隔时间。例如,*/5
表示每隔 5 个时间单位(分钟、小时等)执行一次命令。 - 数字:表示具体的时间值。
以下是一些例子:
0 0 * * *
:每天午夜执行一次。0 0 * * 1
:每周一午夜执行一次。0 9-17 * * 1-5
:工作日的 9 点到 17 点每隔一小时执行一次。0 */3 * * *
:每隔 3 小时执行一次。*/5 * * * *
:每隔 5 分钟执行一次。
需要注意的是,cron 表达式的时间是基于系统时区设置的,因此请确保在编写 cron 表达式时考虑正确的时区。
实操一下
定时清理 Downloads 文件夹中下载超过 7 天的文件,直接丢进废纸篓。 这只是个简单的例子,当然你还可以用它来备份文件或数据库、定期清理系统日志文件、定期下载并备份网站数据、定期运行脚本等等。
- 打开终端应用程序。
- 输入以下命令来打开当前用户的 crontab 文件进行编辑:
crontab -e
- 在编辑器中添加以下行:
0 20 * * * find ~/Downloads/* -mtime +7 -exec mv {} ~/.Trash \;
这行代码的含义是:
0 20 * * *
:cron 表达式,表示该任务将在每天晚上 8 点运行。星号(*
)表示任何可能的值,因此这个表达式将匹配每一天。find ~/Downloads/*
:使用find
命令查找 Downloads 文件夹中的所有文件。-mtime +7
:find
命令选项之一,表示只匹配文件的修改时间比 7 天更早的文件。+7
表示查找修改时间比 7 天更早的文件,而不是正好 7 天。-exec mv {} ~/.Trash \;
:find
命令选项之一,表示将找到的每个文件执行mv
命令。{}
表示当前查找到的文件名,\;
表示命令结束。这个命令将找到的文件移动到当前用户的废纸篓中(~/.Trash
)。
- 按
esc
键,输入:wq
,按下回车保存。
试了一下 Linux 中也适用。