每个工作日Ubuntu的cron工作

在Ubuntu 16上,我试着在工作日上午8:00触发cron工作,这是我迄今为止所尝试的

0 8 * * 1-5 /path/to/command 

 0 8 * * MON-FRI /path/to/command 

不起作用

这些语法在上午8:00的所有工作日都有效:

  • 0 8 * * 1-5 /path/to/command >/dev/null 2>&1
  • 0 8 * * 1,2,3,4,5 /path/to/command >/dev/null 2>&1如您所说@ aleksandar-pavić

更多的解释与这些链接:

使用>/dev/null 2>&1是可选的,目标是将所有输出redirect到/ dev / null。

您必须有另一个问题,如果您使用crontab -e,还必须指定用户

这里是cron语法的提示

 * * * * * * | | | | | | | | | | | +-- Year (range: 1900-3000) | | | | +---- Day of the Week (range: 1-7, 1 standing for Monday) | | | +------ Month of the Year (range: 1-12) | | +-------- Day of the Month (range: 1-31) | +---------- Hour (range: 0-23) +------------ Minute (range: 0-59) 

最后经过testing,find了答案,所以1-5,或者MON-FRI不起作用,有用的是

 0 8 * * 1,2,3,4,5 /path/to/command 

首先,看起来你想在平日运行命令,而不是工作日 。

工作日:一周中的任何一天,星期天除外,通常是星期六和星期天。

工作日:工作完成的一天; 工作日。

如果你想要工作日 ,你必须每天用cron来安排一个脚本,然后在脚本中join必要的逻辑来确定“今天”是否是工作日,这个命令是否需要执行。

由于这个问题被标记为ubuntu-16.04 ,我看了一下相关的手册页 ,内容是:

0-7的星期几(0或7是Sun,或者使用名字)

名称也可以用于day of week字段的monthday of week 。 使用特定date或月份的前三个字母(大小写无关紧要)。 范围或名称列表是不允许的

然后在Ubuntu 16.04服务器上尝试这个crontab:

  * * * * 1-5 date >> /tmp/date.txt 

它确实产生了期望的输出:

 Mon May 1 00:00:25 CEST 2017 Tue May 2 00:00:03 CEST 2017 Wed May 3 00:00:47 CEST 2017 Thu May 4 00:00:01 CEST 2017 Fri May 5 00:00:53 CEST 2017 Fri May 5 00:01:01 CEST 2017 

这是通过在2017年5月第一周的每一天随后将系统时间设置为00:00:00而获得的。结果还强调了cron不保证以小于1分钟的精度间隔执行(如果感兴趣,请参阅关于这个话题的问题)。

出于好奇,我试了下面的crontab:

  * * * * MON-FRI date >> /tmp/date.txt 

令人惊讶的是,与文件所述相反,它仍然有效:

 Mon May 1 00:00:44 CEST 2017 Tue May 2 00:00:39 CEST 2017 Wed May 3 00:00:47 CEST 2017 Thu May 4 00:00:17 CEST 2017 Fri May 5 00:00:10 CEST 2017