在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
字段的month
和day 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