1分ごとに実行されるCronジョブが順序に合わないのですか?

1分ごとに実行されるCronジョブが順序に合わないのですか?

私はクライアントシステムで5分ごと、そして1分ごとにログをポーリングし、他のアプリケーションが外部ファイルを介して保存してアクセスできるように、いくつかのタイミング情報を抽出するいくつかのシェルスクリプトを設定しています。現在の実装では、2つの別々のファイルに1行を書き込むので、うまく機能します。プロセスを改善しているので、1つのファイルに5分ごとに2行を書き、もう1つのファイルに4分の1行を書き込む必要があります。しかし、テストでは、数分ごとに行が順番に実行されないことがわかりました。

私のスクリプトは次のとおりです。

 */5 * * * *     ~/myscript.pl ~/mylog | tail -3 | head -1 > ~/myreport1
 */5 * * * *     ~/myscript.pl ~/mylog | tail -2 | head -1 >> ~/myreport1

 * * * * *       ~/myscript.pl ~/mylog | tail -8 | head -1 > ~/myreport2
 * * * * *       ~/myscript.pl ~/mylog | tail -7 | head -1 >> ~/myreport2
 * * * * *       ~/myscript.pl ~/mylog | tail -3 | head -1 >> ~/myreport2
 * * * * *       ~/myscript.pl ~/mylog | tail -2 | head -1 >> ~/myreport2

場合によっては、数行だけが正しく実行されているように見え、他の場合は1行だけが記録されます。ファイルに書き込まれた行の総数を確認し続けることはありません。それ以外の場合は、抽出する値が正しく収集されないと仮定します。すべてのcron行が実行されているかどうかを確認する方法と、これらの行が順番に発生しないか、まったく実行されない原因になる可能性があるかはわかりません。

ベストアンサー1

cron が cronfile に現れる順序でジョブを実行するという保証はありません。実際には、2つのタスクを同時に実行する可能性が高いです。したがって、仕事を互いに依存させることは決して良い考えではありません。たとえば、cronfileでは、1つのジョブがファイルを作成し、別のジョブ(または3つ)をそのファイルに追加します。アペンダーが最初に起動すると、作成者はアペンダーの操作を効果的に削除します。

より良いアプローチは、1分ごとに4回実行されるドライバスクリプトmyscriptと5分ごとに2回実行される別のドライバスクリプトを作成することです。その後、時間間隔ごとに1つのcronジョブのみを実行するように、両方のドライバスクリプトをcronできます。

おすすめ記事