每个工作日的 Ubuntu cron 任务

每个工作日的 Ubuntu cron 任务

在 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

相关内容