2

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

1 回答 1

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
于 2017-10-02T10:45:40.133 回答