使用 cron 和脚本,我如何才能触发某些操作,例如,在每个月的最后一个星期二之前 11 天的上午 10 点?

使用 cron 和脚本,我如何才能触发某些操作,例如,在每个月的最后一个星期二之前 11 天的上午 10 点?

我想安排一项任务在特定月份的某一周的指定日期之前几秒、几分钟、几小时、几天或几周运行。示例如下:

  • 每月最后一个星期二前 7 天上午 8 点
  • 每月第二个星期六前 11 天上午 10 点
  • 每月最后一个星期五前三天下午 6 点

我习惯设置 cron/at 在指定日期运行作业,并且意识到如果我想按照这些类型的时间表运行,我可能必须结合 cron 运行脚本。

有人能举出我该如何做这件事的例子吗?

答案1

对于您的第一个例子,在每月最后一个星期二之前 7 天的早上 8 点,我会这样做:

0 8 * * 2 [[ $(date +%m) -eq $(date -d +7days +%m) ]] && [[ $(date +%m) -ne $(date -d +14days +%m) ]] && myscript

它的作用是每周二上午 8 点运行(0 8 * * 2),然后说“如果从现在起 7 天后的月份与本月相同”(即,这不是最后的星期二)和“如果从现在起 14 天的月份是不是与本月相同”(即,这是该月的倒数第二个星期二),然后运行myscript

从技术上来说,这可能更有效率——例如,知道该月的倒数第二个星期二不能是该月的第一天——但这只会让它更难理解。:) 此外,根据 cron 运行的具体 shell 等等,可能需要一些引用(+%m可能需要是"+%m")或可能需要转义百分号(即+%m可能需要是+\%m)。

将这一技巧推广到其他日子和高级组合就留给读者练习了。

相关内容