【问题标题】:crontab (cronie), run certain days of the monthcrontab (cronie),运行每月的某些日子
【发布时间】:2018-03-13 08:57:12
【问题描述】:

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

【问题讨论】:

    标签: linux cron fedora dayofmonth


    【解决方案1】:

    来自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
    

    【讨论】:

    • 谢谢 - crontab 语义中的一个奇怪的小皱纹!最后,我将在一周的所有日子里运行它,因为我不太关心它,但我确实想避免月初。
    猜你喜欢
    • 2011-09-06
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-17
    相关资源
    最近更新 更多