假设我有几个 cron 脚本需要每 15 分钟运行一次。我可以将它们设置为运行:*/15 * * * *
,但它们会同时运行。服务器闲置几分钟然后突然尝试同时执行十几个脚本似乎很愚蠢。
有没有办法让我在第 1、16、31、46 分钟运行一个脚本,然后在第 2、17、32、47 分钟运行另一个脚本?
换句话说,我希望每个脚本每 15 分钟运行一次,但我不关心它们是否在十五分钟时专门运行。
答案1
你把事情弄得比实际更复杂了。把它们都放在同一行,用分号隔开:
*/15 * * * * command1 ; command 2 ; command 3
它将运行command1
,等待它完成,然后运行command2
,等待它完成,依此类推。
答案2
如果您的 cron 作业看起来像这样:6-59/15 * * * *
那么它将在整点后的 6、21、36 和 51 分钟运行。
这可能不适用于所有版本的 cron。
答案3
你可以把所有脚本放到一个目录中/etc/cron.15m
,然后让 cron 运行
*/15 * * * * run-parts /etc/cron.15m
假设您有该run-parts
命令。它至少存在于所有基于 Debian 的系统上。它按列表顺序一次运行指定目录中的所有可执行程序。
这种方法的缺点是,如果其中一个脚本挂起,其余所有脚本都将等待而不执行。如果所有脚本的运行时间超过 15 分钟,那么作业将再次开始运行,您可能会看到大量进程堆积。
答案4
Cron 并不擅长于您要做的事情。您是否考虑过编写一个脚本,充当守护进程,基本上休眠 15 分钟,执行命令,然后循环?