每日 cron 作业在数月内处于活动或不活动状态

每日 cron 作业在数月内处于活动或不活动状态

我正在尝试安排一个 cron 作业,但完全失败了。我什至开始认为这不能用 cron 来完成。

我正在尝试设置一项工作,该工作将在六个月内每天在特定时间运行。然后它应该停止两个月,然后再次开始运行六个月,之后它将停止两个月,再次运行六个月,依此类推。

简而言之,我希望它每天运行六个月,停止两个月,然后再次开始运行六个月,无限循环地运行 6 个月/关闭 2 个月。如果一年有 14 个月,我可以想办法做到这一点,但遗憾的是它只有 12 个月。

甚至可以用 cron 来做到这一点吗?

TIA

答案1

无法使用 cron 完全表达您的条件,但是可以通过添加由 shell 评估的条件来补充 cron。这里的想法是告诉 cron 每天在适当的时间运行你的作业,然后在开始作业之前,使用 shell 检查月份。

例如,假设您的月份周期从该月的第一天开始,以下是检查周期的一种方法(从 2020 年 9 月开始):

[[ $((($(date "+%Y*12+10#%m")-(2020*12+9)) % 8)) -lt 6 ]] && ...

这要求date将当前日期格式化为<year>*12+10#<month>10#强制月份采用以 10 为基数的值),然后使用它作为算术表达式来计算自开始月份以来经过的月数,并计算除法的余数8。因此,在起始月份,结果为 0;下个月,1;六个月后,6,八个月后循环重新开始。因此,将结果与 6 进行比较以确定脚本是否应该运行...

假设您的 cron 中使用的 shell 支持此类算术运算,您可以将其直接包含在 cron 选项卡中;否则,请将其包含在脚本的开头。

相关内容