【发布时间】:2016-12-29 11:14:20
【问题描述】:
我需要设置一个 cronjob,它每 5 天运行一次,但我需要它在特定日期开始。
例如,它将每 5 天执行一次 curl,但我希望第一次执行在下周。
这可能吗,还是我应该等到那一天来设置它?
【问题讨论】:
-
到时候我会添加 cron
我需要设置一个 cronjob,它每 5 天运行一次,但我需要它在特定日期开始。
例如,它将每 5 天执行一次 curl,但我希望第一次执行在下周。
这可能吗,还是我应该等到那一天来设置它?
【问题讨论】:
一些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
【讨论】: