我可以使用以下代码每 5 小时设置一次 cron 作业吗?
0 */5 * * * script.sh
Run Code Online (Sandbox Code Playgroud)
我的 script.sh 什么时候执行?
或者
如果我们不能用这种传统方法每 5 小时设置一次 cron 作业,那么还有其他方法可以设置这样的作业吗?
指定为的 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)