crontab 主要用于设置定时任务. Linux 使用 crontab 是简单的.

语法

crontab [-u user] file
crontab [-u user] [ -e | -l | -r ]

-u user 给crontab服务指定用户。
file crontab服务的文件名, 将指定文件的内容做为crontab的任务列表文件并载入crontab。
-e 编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
-l 显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
-r/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
-i 在删除用户的crontab文件时给确认提示。

使用

下面介绍一个常见的用法。

实现一个定时任务,每分钟输出一次当前时间?

新建一个文件 rootcron,命名通常以 cron 结尾,表示其是一个 crontab 文件。

1
* * * * * * date >> /home/baoxuebin/test

执行 crontab rootcron 控制台显示 crontab: installing new crontab 表示任务已经添加成功。如果控制台出现 errors in crontab file, can't install.,则表示 cron 语法或任务指令错误。

可以去 /var/spool/cron/ 下查看 crontab 任务,该 crontab 是之前文件的副本,按用户名区分。也可以使用 crontab -l 查看。日志可以通过 /var/log/cron 查看。

同样,如果想要修改任务,既可以修改 /var/spool/cron/ 下的 crontab 文件,也可以执行 crontab -e

如果之前已经存在 crontab 任务列表,再执行 crontab file 则会覆盖原来的任务列表,以 file 中的内容代替。

删除使用 crontab -r,但这个命令会删除指定用户(默认当前用户)的所有任务,所以需慎重使用。

请注意,频率一般不能表示; 只有均匀划分它们的范围的步数值表示准确的频率(分钟和秒,即2/3,/ 4,/ 5,/ 6,/ 10,/ 12,/ 15,/ 20和/ 30,因为60是可以被这些数字整除;数小时,即/ 2,/ 3,/ 4,/ 6,/ 8和/ 12); 所有其他可能的“步骤”和所有其他领域在“重置”到下一分钟,第二天或第二天之前的时间单位结束时产生不一致的“短”期; 例如,根据月份和闰年,输入* / 5的日期字段有时会在1,2或3天后执行; 这是因为cron是无状态的(它不记得最后一次执行的时间,也没有计算它与现在的差别,这是精确频率计数所需的 - 相反,cron只是模式匹配器)。https://en.wikipedia.org/wiki/Cron

常见问题

shell 脚本不能正常执行,尝试 crontab -e 添加 PATH 路径。

常见 cron 表达式

*(分) *(时) *(日) *(月) *(星期)

* * * * * 每一分钟执行
3,15 * * * * 每小时的第3或15分钟执行
* * */2 * * 每2天执行
* * * * 1 每周一执行