我的 中有几个文件设置crontab
,所有这些脚本必须每 5 分钟运行一次。
当这些脚本一次需要大量 CPU 和 IO 并且机器变得不可用时,问题就会出现。
为了减轻这种影响,我想知道是否有一个选项可以在每个脚本启动之间放置 10 秒。当所有这些脚本有太多数据需要处理时,它应该能够利用我们发出的负载大幅增加(对于单核来说超过 40)。
是否有可能以某种方式在 crontab 中每 5 分钟安排一次脚本,而不是在所有脚本的第五分钟开始时开始?
答案1
创建一个 cron 条目:
*/5 * * * * processA ; sleep 10 ; processB ; sleep 10 ; process C
但是,我建议不要这样做。
我根本不会使用 cron。 Cron 没那么聪明。如果您让它每 5 分钟运行一次作业,而该作业需要 6 分钟才能运行,那么您将运行 2 个进程。到一天结束时,您将同时运行数十或数百个此类进程。
更安全的方法是不使用 cron。相反,运行这样的脚本。使用systemd或/etc/init.d脚本将其变成始终运行的“服务”:
while true ; do
processA
sleep 10
processB
sleep 10
processC
sleep 600
done
可以在这里找到更长的解释:
答案2
cron 没有选择以秒为单位的选项。相反,请使用sleep
.
例如,如果这些都是 shell 脚本:
- 像往常一样设置第一个脚本的 cron。
- 添加
sleep 10
到第二个脚本,以便在 10 秒后开始实际执行。 - 添加
sleep 20
到第三个......等等。