Crontab每周的日期语法

在crontab中,星期的一天字段是从0 - 6还是1 -7运行的?

我看到了相互矛盾的信息。维基百科声明0-6和其他网站我看到的是1-7

另外,使用07是错误的,这意味着什么?例如,cron还能运行吗?

321453 次浏览

07都代表星期日,你可以使用你想要的,所以写0-6或1-7有相同的结果。

此外,正如@Henrik所建议的那样,可以用缩短的日期名称来替换数字,例如MONTHU等:

0 - Sun      Sunday
1 - Mon      Monday
2 - Tue      Tuesday
3 - Wed      Wednesday
4 - Thu      Thursday
5 - Fri      Friday
6 - Sat      Saturday
7 - Sun      Sunday

从图形上看,* * * * * command to be executed表示:

一分钟 小时 月几号 星期几
(0-59) (0-23) (1 - 31) (1 - 12) (1 - 7)
需要执行的命令

或者使用旧的风格:

 ┌────────── minute (0 - 59)
│ ┌──────── hour (0 - 23)
│ │ ┌────── day of month (1 - 31)
│ │ │ ┌──── month (1 - 12)
│ │ │ │ ┌── day of week (0 - 6 => Sunday - Saturday, or
│ │ │ │ │                1 - 7 => Monday - Sunday)
↓ ↓ ↓ ↓ ↓
* * * * * command to be executed

最后,如果你想指定每天,你可以用逗号分隔天,例如SUN,MON,THU将只在周日,周一,周四执行命令。

你可以在维基百科关于Cron的文章中阅读更多细节,并使用crontab.guru在线检查cron表达式。

你也可以使用日期名称,比如Mon表示周一,Tue表示周二,等等。它更人性化。

    :-) Sunday    |    0  ->  Sun
|
Monday    |    1  ->  Mon
Tuesday    |    2  ->  Tue
Wednesday    |    3  ->  Wed
Thursday    |    4  ->  Thu
Friday    |    5  ->  Fri
Saturday    |    6  ->  Sat
|
:-) Sunday    |    7  ->  Sun

如你所见,如上所述,数字07都分配给Sunday。还列出了一周的英文缩写日期,也可以在crontab中使用。

数字或缩写用法的例子

15 09 * * 5,6,0             command
15 09 * * 5,6,7             command
15 09 * * 5-7               command
15 09 * * Fri,Sat,Sun       command

这四个示例执行相同的操作,并在每个周五、周六和周日的9.15点执行一个命令。

详细

星期天有两个数字07对于编写以0开始或以7结束的工作日范围很有用。因此,您可以编写以Sunday开头或以Sunday结尾的范围,例如0-25-7(范围必须以较小的数字开头,必须以较大的数字结束)。不能使用缩写来定义工作日范围。