Crontab 和星期几

typ*_*ror 4 cron

我正在尝试设置一个在星期日每周运行一次的 cron 作业。我想我应该使用“dayofweek”位置并将其设置为 0,但我不确定这是否会覆盖当天位置的“*”。

45 2 * * 0 /scripts/backup.sh
Run Code Online (Sandbox Code Playgroud)

这样对吗?

Jon*_*ler 10

你是对的 - 正如已经报道的那样。

请注意,安排在星期日 02:45 的作业不会在时钟向前跳动的春季星期天运行(而安排在星期日 01:45 的作业将在秋季(秋季)的星期天运行两次,届时时钟回落)。推论:不要在 01:00-03:00 窗口安排作业,如果您可能在冬季和夏季(标准和夏令时)时间之间的时钟变化时运行它们。

另请注意,您无法通过在第三(天)列中添加“1”来在任何一个月的第 1 天运行作业。如果你写:

45 2 1 * 0 /scripts/backup.sh
Run Code Online (Sandbox Code Playgroud)

那么该命令将在每个月的 1 号运行,无论日期如何,在星期日运行,无论该月的日期如何。与直觉相反,星期几列与其他显式条件进行 OR 运算,而不是 AND 运算。我以艰难的方式学到了这一点——让公众自欺欺人。请参阅'crontab'的POSIX规范,它要求第 0 天 = 星期日,并且不允许第 7 天作为同义词。