デーモンを起動するスクリプトをロックします。

デーモンを起動するスクリプトをロックします。

cronを使用してスクリプトを実行します。

*/10 * * * * flock -n /tmp/lock script

同時に1つのスクリプトインスタンスのみを実行する必要があります。これには群れを使用します。問題は、時々このスクリプトがデーモンプロセスを開始し、その場合、デーモンが次のスクリプトの実行をブロックすることです。

考えられる解決策はスクリプトの最後でファイルのロックを解除することですが、cronコマンドから直接これを実行できますか?

答え1

デーモンがcronを介して実行されることを望むようです。もしそうなら、これは良い考えではありません。この群れが時々失敗するのはなぜですか? / tmpディレクトリを使用してください。たぶん、他のプロセスが古いファイルを削除した可能性があります。完了すると、FlockはFlockされたが削除されたファイルを保持し続けます。別の10分クローンラウンドでは、他のクラスタインスタンスがファイルを検証できず、別のインスタンスを作成した後に不要な重複ファイルを実行します。回避策は、ロックファイルを/ var / runディレクトリまたは別の場所に移動することです。デーモンがジョブを頻繁に終了する場合は、終了コードを検討してください。 INT15 信号にいくつかの終了コードを割り当てます。 「無限」ループでデーモンを実行します。このループは、sig15または他のものによってデーモンが終了したことを検出する必要があります。それ以外の場合は別のループを実行してください。 15の場合、ループを終了してデーモンを終了します。 debian と redhat で利用可能な runv パッケージを使用できます。 cronとは全く異なる動作をします。スクリプト/デーモン実行可能ファイルを実行し、完了または競合するのを待ちます。表示されたら再起動してください。これにより、コードを2回実行することを心配する必要がなく、cronが作業に適していないため、cronでゲームを終了できます。

関連情報