我想创建一个crontab条目,它将在每个工作日运行,除了每个月的第1天,第2天和第3天。这就是我所拥有的:
45 8,12,16 4-31 * 1-5 my_program
我认为这具有以下含义:
minutes: 45 past the hour
hours: 8, 12, and 16
day of month: 4th to 31st inclusive
month: all
day of week: Monday to Friday inclusive
这就是我在crontab(5)
手册页中所读到的内容。但是,我可以看到这份工作是在今天的10月2日星期一08:45进行的。我确定crontab文件已正确加载(crontab -l
显示它);它最近没有改变。 date
显示的系统日期和时间也是正确的。
我缺少什么来确保我的cron工作只从第4个开始运行?我正在使用Fedora Linux:
% rpm -qf `which crontab`
cronie-1.5.0-3.fc23.x86_64
% rpm -q fedora-release
fedora-release-23-1.noarch
答案 0 :(得分:2)
来自crontab
手册:
注意:命令执行的日期可以由两个指定 字段 - 月中的某天和星期几。如果两个字段都受限制 (即,不是*),该命令将在任一字段运行 匹配当前时间。例如, “30 4 1,15 * 5”将导致命令在每个月的1日和15日凌晨4:30以及每个星期五运行。但是,人们可以 通过在命令中添加测试来实现所需的结果(请参阅 以下示例CRON文件中的最后一个示例。
上述示例如下所示:
0 4 8-14 * * test $(date +\%u) -eq 6 && echo "2nd Saturday"
所以在你的情况下,它就像这样(未经测试):
45 8,12,16 4-31 * * test $(date +\%u) -lt 6 && my_program