古いシェルスクリプトが実行を完了するのを待ちます。

古いシェルスクリプトが実行を完了するのを待ちます。

毎時間シェルスクリプトを実行する必要があります。ただし、前の実行が完了するまで次の実行を開始したくありません。

答え1

質問にLinuxというタグを付けたので、次のようにしてよく知られflockているファイルをロックできます。

flock "${TMPDIR:-/tmp}"/some_name.lock /path/to/your_command -options

コマンドの2番目のインスタンス(同じ方法で実行)は、最初のインスタンスが完了するのを待ちます。このアプローチの問題は、コマンドが頻繁に1時間以上かかると、ロックを待つインスタンスがより多く蓄積されることです。

あるいは、最初のインスタンスがまだ完了していない場合は、2番目のインスタンスの実行をスキップできます。

flock -n "${TMPDIR:-/tmp}"/some_name.lock /path/to/your_command -options

このアプローチの問題は、1日に24回未満でコマンドを実行できることです。

答え2

問題をよりよく定義する必要があります。

Satoは、遅延インスタンスの背後から新しいインスタンスをバックアップする方法について説明します。

Jaroslavのソリューションは、以前のインスタンスが完全に完了していないことを検出するメカニズムのみを提供します。

別のオプションは、スクリプト自体内でスクリプトの次のインスタンスを予約することです。

at now + 1 hour $*

以前のインスタンスが完了していないときの動作を定義し、インスタンスを毎時間起動するか、完了と開始の間に定義された間隔で開始するかを定義する必要があります。

答え3

スクリプトの起動時にいくつかの一時ファイルを生成し、スクリプトが閉じる前に削除することができます。スクリプトはファイルが存在することを確認する必要があります。これが見つかると終了し、何もしません。そうでない場合は、新しく作成して続行してください。

または、cronジョブでpgrepを使用して実行中のスクリプトを確認し、そのスクリプトが実行されていない場合にのみ続行できます。

関連情報