最近参加面试,笔试的时候遇到很多crontab比较复杂的问题,想在这里记录一下,方便以后遇到可以查阅解决。
先说一下crontab的语法规范
代表意义 | 分钟 | 小时 | 日期 | 月份 | 周 | 命令 |
数字范围 | 0~59 | 0~23 | 0~31 | 0~12 | 0~7 | 需要执行的命令 |
需要注意的是,一共只有5个区间,最后一个才是周,周中0和7都代表星期天,而且周还可以用英文缩写代替,如:Mon、Tues、Wed、Thur、Fri、Sat、Sun(字母大小写都可)
另外,还有一些辅助的字符,大概有下面这些:
特殊字符 | 代表意义 |
*(星号) | 代表任何时刻都接受的意思。举例来说,范例一内那个日、月、周都是*,就代表着不论何月、何日的礼拜几的12:00都执行后续命令的意思。 |
,(逗号) | 代表分隔时段的意思。举例来说,如果要执行的工作是3:00与6:00时,就会是:0 3,6 * * * command 时间还是有五列,不过第二列是 3,6 ,代表3与6都适用 |
-(减号) | 代表一段时间范围内,举例来说,8点到12点之间的每小时的20分都进行一项工作:20 8-12 * * * command 仔细看到第二列变成8-12.代表 8,9,10,11,12 都适用的意思 |
/n(斜线) | 那个n代表数字,即是每隔n单位间隔的意思,例如每五分钟进行一次,则:*/5 * * * * command 用*与/5来搭配,也可以写成0-59/5,意思相同 |
每分钟执行一次a.sh脚本:
*/1 * * * * /bin/sh a.sh
每小时执行一次a.sh脚本:
0 */1 * * * /bin/sh a.sh 或者 0 * * * * * /bin/sh a.sh
每天早上8点执行一次a.sh脚本:
0 8 * * * * /bin/sh a.sh
每天早上6点到10点之间每隔两个小时执行一次a.sh脚本:
0 6-10/2 * * * /bin/sh a.sh 或者 0 6,8,10 * * * /bin/sh a.sh
每月1号0点执行一次a.sh脚本:
0 0 1 * * /bin/sh a.sh
每年一月一日0点执行一次a.sh脚本:
0 0 1 1 * /bin/sh a.sh
每个星期二8点执行一次a.sh脚本:
0 8 * * 2 /bin/sh a.sh 或者 0 8 * * Tues /bin/sh a.sh