如何设置每 5 小时的 cron 作业

Swa*_*ule 5 cron

我可以使用以下代码每 5 小时设置一次 cron 作业吗?

0 */5 * * * script.sh
Run Code Online (Sandbox Code Playgroud)

我的 script.sh 什么时候执行?

  1. 0000, 0500, 1000, 1500, 2000, 0100, 0600, 1100, 1600, 2100 等等...

或者

  1. 0000, 0500, 1000, 1500, 2000, 0000, 0500, 1000, 1500, 2000 等等...

如果我们不能用这种传统方法每 5 小时设置一次 cron 作业,那么还有其他方法可以设置这样的作业吗?

Kus*_*nda 8

指定为的 cron 作业

0 */5 * * * script.sh
Run Code Online (Sandbox Code Playgroud)

将作为您的第二个选项运行,在 20:00 和 00:00 之间的工作之间有四个小时。

您可以尝试使用五个作业规范:

0 0-20/5 1-31/5 * * script.sh
0 1-21/5 2-31/5 * * script.sh
0 2-22/5 3-31/5 * * script.sh
0 3-23/5 4-31/5 * * script.sh
0 4-19/5 5-31/5 * * script.sh
Run Code Online (Sandbox Code Playgroud)

第三个字段是一个月中的第几天。这将在五天的倍数的月份中每五个小时完美地运行一次您的工作。在其他月份,您会遇到相同的问题,即当月的最后一次作业运行和新月份的第一次运行之间的延迟太短。

这可能没问题。如果不是,您可能需要考虑在无限循环中将作业作为后台作业运行,并内置 5 小时延迟。

#!/bin/sh

while true; do
    script.sh &
    sleep 18000   # 5h
done
Run Code Online (Sandbox Code Playgroud)

以上将是一个将在后台运行的控制脚本。

在大量迭代后,这显然会开始轻微漂移,并且您可能很难在整点开始。

另一个想法是让脚本本身使用at以下方法重新安排自己:

#!/bin/sh

echo script.sh | at now + 5 hours

# rest of script goes here.
Run Code Online (Sandbox Code Playgroud)


fra*_*s P -2

如果将其设置为每 5 小时,则为每 5 小时,所以 0、5、10、15、20、1、6 等...(*/5 语法)

如果您需要将其设置为 0 5 10 15 20 0 5 10 等...您必须明确指定它

0 5,10,15,20,0 * * * somejob
Run Code Online (Sandbox Code Playgroud)