我所说的“相邻 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