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

abi*_*one 2 linux bash scheduled-task cron

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

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

我很乐意设置 cron/at 在指定的日期运行作业,并意识到如果我想按这些类型的时间表运行,我可能不得不与 cron 一起运行脚本。

有没有人有我如何去做的例子?

小智 6

对于您的第一个示例,即本月最后一个星期二前 7 天的上午 8 点,我会这样做:

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

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

从技术上讲,这可能更有效——例如,您知道本月的倒数第二个星期二不能是本月的第 1 日——但这只会让它更难理解。:) 此外,具体取决于哪个 shell cron 运行等等,可能需要一些引用(+%m可能需要是"+%m"),或者您可能需要转义百分号(即+%m可能需要是+\%m)。

将此技巧推广到其他日子和高级组合作为练习留给读者。