Crontab 的格式

不管是开发还是运维,我们都有周期性执行一些程序或脚本的需求。Linux 提供了 crond 进程来帮我们周期性的执行某些命令,crond 每分钟检查当前系统是否有需要执行的任务,如果有需要执行的命令,则自动执行该命令。

Crontab 是 Linux 下用来管理定期执行计划的命令,具体的命令由 crond 进程负责调度,crond 是 Linux 下周期性执行某种任务的一个守护进程。cond 每分钟定期检查是否有要执行的任务,任务的清单一般来自 /etc/crontab 配置文件。

语法格式

1
2
$ crontab [-u user] file
$ crontab [-u user] { -l | -r | -e }

参数说明

  • [-u user] 为可选参数,用来指定该命令执行的用户,默认情况下表示设定执行用户为当前用户。
  • file 表示文件名,该文件内包含相关的定期任务指令,crontab 命令可以将该文件载入并定期执行文件内定义的任务。如果在命令行中没有指定文件,则能够接收标准输入上键入的命令,输入后按 Ctrl + d 退出即可。
  • -l 表示列出当前的执行任务清单
  • -r 表示删除当前的执行任务
  • -e 表示指定编辑执行任务的编辑器

文件格式

第1列分钟1~59
第2列小时1~23(0表示子夜)
第3列日1~31
第4列月1~12
第5列星期0~6(0表示星期天)
第6列要运行的命令

下面是crontab的格式:
分 时 日 月 星期 要运行的命令

实用案例

这里有crontab文件条目的一些例子:

30 21 * * * /usr/local/apache/bin/apachectl restart
上面的例子表示每晚的21:30重启apache。

45 4 1,10,22 * * /usr/local/apache/bin/apachectl restart
上面的例子表示每月1、10、22日的4 : 45重启apache。

10 1 * * 6,0 /usr/local/apache/bin/apachectl restart
上面的例子表示每周六、周日的1 : 10重启apache。

0,30 18-23 * * * /usr/local/apache/bin/apachectl restart
上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。

0 23 * * 6 /usr/local/apache/bin/apachectl restart
上面的例子表示每星期六的11 : 00 pm重启apache。

0 */1 * * * /usr/local/apache/bin/apachectl restart
每一小时重启apache

#20160912修正,感谢@张琼的指正,之前写错了,*/1和*表示的同样的意思,对于 / 的用法,可以参考另一篇文章Crontab中的除号到底怎么用?

0 23-7/1 * * * /usr/local/apache/bin/apachectl restart
晚上11点到早上7点之间,每隔一小时重启apache

0 11 4 * mon-wed /usr/local/apache/bin/apachectl restart
每月的4号与每周一到周三的11点重启apache

0 4 1 jan * /usr/local/apache/bin/apachectl restart
一月一号的4点重启apache

参考资料

  1. crond定时任务

cocowool

A FULL STACK DREAMER!