Crontab 案例

写于 2020 年 3 月 16 日:

Crontab

其实就是 Linux 操作系统中用来设置定时任务的工具,也就是可以使得特定的任务在特定的时间得以(周期性的)执行.比如说,定时备份、定时清理临时文件目录、收集日志、发送或者检查邮件等等.

帮助文档的获取和阅读

要开始学习 crontab 的语法可以运行:

man 5 crontab

要学习 crontab 命令的用法可以运行:

man crontab
# 或者 man 1 crontab

文档说:

crontab -e

可以打开 crontab 配置文件并编辑.

编辑自己的 crontab

运行:

crontab -e

与手动找到配置文件并且手动编辑的差别是,它会自动为你找到配置文件并且打开,并且如果格式不对,还会给出提示.

crontab 的格式

crontab 记录是一行一行的,形象地说:

*  *  *  *  *  command
|  |  |  |  |  |
|  |  |  |  |  |
|  |  |  |  |  要执行的命令
|  |  |  |  每周的哪几天
|  |  |  每年的哪几月
|  |  每月的哪几天
|  每天的哪几小时
每小时的哪几分钟

这 5 个星号,无论其是否填入数字,组合起来可以看成是一个 5 元组,表示时间点的集合.

cron 程序主要做的事情,就是先计算出在当前时刻,是第几分钟,是第几小时,是第几天,是第几月,是每周的周几,然后再将这几个数字和 crontab 记录做比对,确定是否执行命令.具体的实现也可以是先算好哪些时间执行,然后再配置触发器,使得到了那个时间 crontab 被触发.

具体的案例

5 0 * * *

每天的 0 点 5 分.

15 14 1 * *

每月的 1 号的 14 点 15 分.

0 22 * * 1-5

周一到周五,每天晚上 10 点整.

5 4 * * sun

每周周天的凌晨 4 点 5 分.

*/2 * * * *

每小时的 0, 2, 4, ... 分.

0 0 3-31/7 * *

每月的 3, 10, 17, 24 号.斜杠后面表示间隔,横杠表示范围.

0-4,8-12 * * * *

每小时的 0 分到 4 分,以及每小时的 8 分到 12 分.例如 9:00, 9:01, ..., 9:04, 以及 7:08, 7:09, ..., 7:12.

0-4/2,8-12/4 * * * *

斜杠和横杠也可以组合.每小时的 0 分,2 分,以及 4 分,每小时的 8 分,12分.

参考文献

[1] (37) Linux/Mac Tutorial: Cron Jobs - How to Schedule Commands with crontab - YouTube

[2] crontab.guru - the cron schedule expression editor