在 Ubuntu 16 上,我尝试在工作日上午 8:00 触发 cron 作业,以下是我目前尝试过的方法
0 8 * * 1-5 /path/to/command
和
0 8 * * MON-FRI /path/to/command
不起作用
答案1
这些语法适用于所有工作日上午 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
是可选的,目标是将所有输出重定向到 /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)
答案2
最后测试并找到了答案,所以 1-5 或 MON-FRI 不起作用,有效的是
0 8 * * 1,2,3,4,5 /path/to/command
答案3
工作日:一周中除星期日或通常为星期六和星期日以外的任何一天。
工作日:进行工作的日子;工作日。
如果你想要工作日,您必须每天使用 来安排脚本cron
,然后在该脚本中构建必要的逻辑来确定“今天”是否是工作日以及是否需要执行命令。
由于问题被标记ubuntu-16.04
,我查看了相关的手册页内容如下:
星期几 0-7(0 或 7 表示星期日,或使用名称)
month
和字段也可以使用名称day of week
。使用特定日期或月份的前三个字母(大小写无关)。 不允许使用范围或名称列表。
然后在 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 不能保证以小于一分钟的精度间隔执行(如果感兴趣,请参阅问题关于这个话题)。
出于好奇,我尝试了以下 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