crontab 只排除特定日期

RKP*_*RKP 4 cron

如何编写一个排除特定日期的 cron。

让说:我需要在周末每 30 分钟运行一次 crontab,并且只想排除 2014 年 5 月 10 日。

是否可以?我怎么能写这个?或者有什么替代方法吗?请建议。

mr.*_*tic 5

标准 cron 语法非常简单,它不支持排除。在某些情况下,可以创建一个包含多个/多个 cron 条目的列表来实现此类逻辑,但这往往很乏味且难以理解或维护;但是,这种方法不适用于您的情况(尤其是因为标准 cron 没有日历年的概念)。

使 cron 命令变得复杂并不是一个好的计划,但是您可以使用相对简单的方法来做到这一点,例如:

0,30 18-20 * * sat,sun [ "$(date +\%Y\%m\%d)" = "20140510" ] || mycommand
0    21    * * sat,sun [ "$(date +\%Y\%m\%d)" = "20140510" ] || mycommand
Run Code Online (Sandbox Code Playgroud)

(使用“ 0,30 18-21”,任务也将在 21:30 运行;如果您希望也在 21:00 运行,则需要第二行,如果没有则省略它)

注意:在某些 crontab 中,您必须转义百分比符号(它们用于在将内联数据填充到命令的标准输入中时指示换行符),尽管在 Dillon 的 cron 中没有。

cron 命令实际上是一个 shell命令列表||控制运算符提供命令的短路评估。列表中的命令一次尝试一个,从左到右,但当第一个返回 true 时执行停止。如果日期字符串比较返回 true(仅适用于一天)mycommand则不运行,当日期比较返回 false 时mycommand运行。

但是请注意,cron 启动程序的方式有很多不同。最可靠的方法是使用包装器脚本来实现您的条件逻辑。