是否有最佳实践可以让相邻的 cron 任务及时完成?

是否有最佳实践可以让相邻的 cron 任务及时完成?

我所说的“相邻 cron 任务”是指在相同上下文和相近时间执行任务的任务。例如,目前我有这些 cron 任务:

0 0 * * * for dir in /var/www/html/*/; do cd "$dir" && /usr/local/bin/wp plugin update --all --allow-root; done
0 0 * * * for dir in /var/www/html/*/; do cd "$dir" && /usr/local/bin/wp core update --allow-root; done
0 0 * * * for dir in /var/www/html/*/; do cd "$dir" && /usr/local/bin/wp theme update --all --allow-root; done

正如您所看到的,它们做了相当“繁重”的工作:他们更新了几个站点中的所有插件,上传它们的核心,然后上传它们的主题。

我为第一个任务分配了 1 分钟,为第二个任务分配了 1 分钟,为第三个任务分配了 1 分钟。

根据我的经验,将它们全部放在第一分钟(第 0 分钟)不会有问题,因为 cron 计时只是开始任务的最短时间,但是与任务关联的每个进程只有在可以启动时才会启动,所以我敢打赌,这样做通常不会有任何问题。

不管怎样,我的问题是这样的:

是否有(至少)最佳实践将相邻的 cron 任务拆分到同一天同一小时(0,1,2)的稍后分钟,甚至同一天的不同时间?

在这种情况下,我的任务计时将如下所示:

0 0 * * *
0 1 * * *
0 2 * * *

答案1

对于除了运行简单命令之外的任何操作,请安排一个执行复杂处理的脚本,而不是尝试直接在 crontab 中执行此操作。

#!/bin/sh

for dir in /var/www/html/*/; do
    ( cd "$dir" && /usr/local/bin/wp plugin update --all --allow-root )
done

for dir in /var/www/html/*/; do
    ( cd "$dir" && /usr/local/bin/wp core update --allow-root )
done

for dir in /var/www/html/*/; do
    ( cd "$dir" && /usr/local/bin/wp theme update --all --allow-root )
done

甚至

#!/bin/sh

for dir in /var/www/html/*/; do
    ( cd "$dir" && {
        /usr/local/bin/wp plugin update --all --allow-root
        /usr/local/bin/wp core update --allow-root 
        /usr/local/bin/wp theme update --all --allow-root
      } )
done

相关内容