一度に1つのコピーしか実行できないように、長期実行シェルスクリプトを作成したいと思います。スクリプトがクラッシュした場合は、クラッシュした呼び出しのロックによってスクリプトへの新しい呼び出しが中断されないようにしたいと思います。
はいlockfile-*
ユーティリティセット正しいものを使っていますか?スクリプトで使用すると競合状態が発生する可能性がありますか?
--use-pid
マニュアルページに記載されている5分の制限を解除してもよろしいですか?私のスクリプトを実行するのにはるかに長い時間がかかります。
私はNFSや同様のものがないAmazon EC2でUbuntu 10.10インスタンスを使用しています。
ベストアンサー1
ロックの作成は、コマンドlockfile
またはflock
システムコールを介して実行することも、ディレクトリの作成(無中断操作)を介して実行することもできますが、2番目の部分はよりトリッキーです。
ロックが存在する場合、ロックがまだ実行中のプロセスに属しているかどうかを確認する方法は?
最も一般的な解決策は、プロセスのPIDをロックファイルに入れることです。
ロックを作成する前に、ロックファイルがすでに存在することを確認する必要があります。その場合は、PIDがロックを作成するのと同様の実行中のプロセスと一致していることを確認してください。そうでない場合は、ロックを削除して再生成してください。