【问题标题】:Set up a cronjob to run every N days with a specific date as a start将 cronjob 设置为每 N 天运行一次,并以特定日期为开始
【发布时间】:2016-12-29 11:14:20
【问题描述】:

我需要设置一个 cronjob,它每 5 天运行一次,但我需要它在特定日期开始。

例如,它将每 5 天执行一次 curl,但我希望第一次执行在下周。

这可能吗,还是我应该等到那一天来设置它?

【问题讨论】:

标签: shell curl cron


【解决方案1】:

一些cron 实现可能会为您提供当天的*/5 语法,甚至是例如16-31/5 语法意思是“从 16 日开始每 5 天”。

第一个问题是您在接下来的几个月中需要第二个*/5 条目。这种语法的第二个问题是,您的脚本将在每个月的 1 日、6 日、11 日、16 日、21 日、26 日和 31 日触发。这些固定的日子通常不是“每 5 天一次”的意思。

您的解决方案是每天使用cron 触发您的工作(可能从您选择的第一天开始)并在您的脚本中进行初步计算以确定您是否是 5 天期间的第一天.如果没有,您立即使用exit 0 结束您的脚本。

这个测试可能很简单(在bash):

(( $(date +"%j") % 5 == 0 )) || exit 0

注意,有了这样一行,如果一年中的日期是5的倍数,脚本就会执行。至于crontab中的*/5,这可能不是每5天在年份变化时执行一次,而是这是一个很好的近似值。你有这个想法,你可能会做得更好。

[update]这个当然可以加到cron执行的命令中:

SHELL=/bin/bash
mn h * * * (( $(date +"%j") % 5 == 0 )) && my_command

【讨论】:

  • 我正在考虑做类似的事情,但我想避免每天使用脚本中的代码逻辑执行的 cron。
  • @Frozkata 这个逻辑可以移到 cron 命令中。如果您希望避免某些特定的解决方案,那么您应该在您的问题中明确说明,我们不是读心者。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-31
  • 2014-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多