如何将 cron 作业设置为每 5 天 运行?
How to setup cron job to run every 5 days?
我想设置 cronjob,例如今天开始,它会 运行 每 5 天。
这就是我现在拥有的,这能正常工作吗?如果我在 5 点安装此作业,然后每 5 天在早上 6 点安装。
0 6 */5 * * mailx -r root@mail.com -s "Message title" -c "cc@mail.com" primary@mail.com < body.txt
0 0 */5 * * midnight every 5 days.
看到这个,类似的问题每 3 天问一次。
Cron job every three days
请耐心等待,这是我第一次发布答案...如果我有任何不清楚的地方,请告诉我。
我不认为你有你需要的东西:
0 0 */5 * * ## <<< WARNING!!! CAUSES UNEVEN INTERVALS AT END OF MONTH!!
不幸的是,*/5 正在根据每月的日期设置时间间隔。参见:explanation here。在月底,保证会重复出现问题。
1st at 2019-01-01 00:00:00
then at 2019-01-06 00:00:00 << 5 days, etc. OK
then at 2019-01-11 00:00:00
...
then at 2019-01-26 00:00:00
then at 2019-01-31 00:00:00
then at 2019-02-01 00:00:00 << 1 day WRONG
then at 2019-02-06 00:00:00
...
then at 2019-02-26 00:00:00
then at 2019-03-01 00:00:00 << 3 days WRONG
根据 this article,您需要向正在执行的命令添加一些模数学以获得 TRUE "every N days"。例如:
0 0 * * * bash -c '(( $(date +\%s) / 86400 \% 5 == 0 )) && runmyjob.sh
在此示例中,作业将在每天上午 12:00 检查,但仅当自 01-01-1970 模 5 以来的天数为 0 时才会执行。
如果您希望从特定日期起每 5 天计算一次,请使用以下格式:
0 0 * * * bash -c '(( $(date +\%s -d "2019-01-01") / 86400 \% 5 == 0 )) && runmyjob.sh
Brad 的最后一个片段将不起作用,因为它忽略了实际日期。
date +%s -d "2019-01-01"
将始终 return 相同的秒数,最终将始终为真或始终为假,具体取决于您选择的日期。
从 2019-01-01 00:00:00 开始,您必须每 5 天在 00:00 进行一次这样的额外计算 运行:
0 0 * * * bash -c '(( ( $(date +\%s) - $(date +\%s -d "2019-01-01 00:00:00") ) / 86400 \% 5 == 0 )) && runmyjob.sh'
我想设置 cronjob,例如今天开始,它会 运行 每 5 天。 这就是我现在拥有的,这能正常工作吗?如果我在 5 点安装此作业,然后每 5 天在早上 6 点安装。
0 6 */5 * * mailx -r root@mail.com -s "Message title" -c "cc@mail.com" primary@mail.com < body.txt
0 0 */5 * * midnight every 5 days.
看到这个,类似的问题每 3 天问一次。 Cron job every three days
请耐心等待,这是我第一次发布答案...如果我有任何不清楚的地方,请告诉我。
我不认为你有你需要的东西:
0 0 */5 * * ## <<< WARNING!!! CAUSES UNEVEN INTERVALS AT END OF MONTH!!
不幸的是,*/5 正在根据每月的日期设置时间间隔。参见:explanation here。在月底,保证会重复出现问题。
1st at 2019-01-01 00:00:00
then at 2019-01-06 00:00:00 << 5 days, etc. OK
then at 2019-01-11 00:00:00
...
then at 2019-01-26 00:00:00
then at 2019-01-31 00:00:00
then at 2019-02-01 00:00:00 << 1 day WRONG
then at 2019-02-06 00:00:00
...
then at 2019-02-26 00:00:00
then at 2019-03-01 00:00:00 << 3 days WRONG
根据 this article,您需要向正在执行的命令添加一些模数学以获得 TRUE "every N days"。例如:
0 0 * * * bash -c '(( $(date +\%s) / 86400 \% 5 == 0 )) && runmyjob.sh
在此示例中,作业将在每天上午 12:00 检查,但仅当自 01-01-1970 模 5 以来的天数为 0 时才会执行。
如果您希望从特定日期起每 5 天计算一次,请使用以下格式:
0 0 * * * bash -c '(( $(date +\%s -d "2019-01-01") / 86400 \% 5 == 0 )) && runmyjob.sh
Brad 的最后一个片段将不起作用,因为它忽略了实际日期。
date +%s -d "2019-01-01"
将始终 return 相同的秒数,最终将始终为真或始终为假,具体取决于您选择的日期。
从 2019-01-01 00:00:00 开始,您必须每 5 天在 00:00 进行一次这样的额外计算 运行:
0 0 * * * bash -c '(( ( $(date +\%s) - $(date +\%s -d "2019-01-01 00:00:00") ) / 86400 \% 5 == 0 )) && runmyjob.sh'