crontab(cronie),运行一个月的某些日子

时间:2017-10-02 09:32:09

标签: linux cron fedora dayofmonth

我想创建一个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

1 个答案:

答案 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