シェルスクリプトのエラー処理

シェルスクリプトのエラー処理

run_script.sh私は空のファイルを生成するステップを含むシェルスクリプトを書いていますrun_script.lck。 cronjobはシェルスクリプトを呼び出すたびに確認しますrun_script.lck。ロックがある場合は、プログラムがrun_script.shすでに実行されており、まだ完了していないことを意味します。ファイルはrun_script.lckプログラムの終わりに削除されます。

問題は、シェルスクリプトがクラッシュしたときに終了する前にロックファイルを削除することです。

私は次の行を書きました:

trap "rm -f run_script.lck" EXIT

ただし、次のように不要にロックされたファイルを削除します。

シェルAで実行しrun_script.shて実行している場合は、ロックファイルが生成されます。その後、シェルBで再度実行すると、スクリプトはすでに実行中であるため、スクリプトが中断されるというメッセージが表示されます。ただし、トラップはシェルB(中断されたスクリプトを終了する)からのシグナルを含むEXITシグナルを受け取り、ロックファイルを削除します。シェルAのスクリプトはまだ実行中ですが、ロックは削除されており、run_script.sh他のスクリプトがすでに実行されている間は誰でも他のスクリプトを再度呼び出すことができます。

この問題を解決する方法を知っていますか?

ベストアンサー1

ロックが存在することを確認する今後トラップを設定してください。

おすすめ記事