隣接する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分、2番目のタスクに1分、3番目のタスクに1分を割り当てました。

私の経験では、すべてを最初の1分(0分)に入れることは問題ではありません。ジョブを開始するのに必要な最小時間ただし、タスクに関連する各プロセスは起動可能な場合にのみ開始されるため、通常はこれを実行するのに問題がないと確信しています。

とにかく私の質問はこんな感じです。

隣接する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

おすすめ記事