- ベストアンサー
シェルスクリプト間で排他をとりたい
環境 linux(redhat) 使用シェル bash シェルスクリプトAとシェルスクリプトBを作成し、 シェルスクリプトAが動作している間は、シェルスクリプトBの動作を禁止したいと考えています。 例えば、シェルスクリプトAが起動している状態で、シェルスクリプトBが起動されたとき、シェルスクリプトBは、シェルスクリプトAが起動していることを検知して、自発的に処理を終了するようにしたいと考えています。 上記のような仕組みをシェルスクリプトで実現可能でしょうか? 基本的には、シェルスクリプトの先頭で、ある資源のロックを行い、終了時にロックの解放ができれば、その仕組みは実現可能と考えています。 (シェルの異常終了時は、ロックが自動的に解放されることが望ましい) 上記のようなことをシェル(bash)で実現可能でしょうか。 bash単独での方法、もしくはbashからperl,C言語作成の実行モジュールを呼び出す方法でもかまいません。 (ちなみにperl(もしくはC言語作成のモジュール)単独では実現可能なことはわかっています)
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
lockfileコマンドでいけるのではないかと。 詳しくはman lockfileをご覧下さい。 ただ、異常終了時は少し困りますね。 trapコマンドでシグナルを捕捉することはできますが、 SIGKILLは捕捉できないです。 まぁ、どうしようもないですが。
その他の回答 (1)
- 774danger
- ベストアンサー率53% (1010/1877)
自分がよく使っていた方法としては、 ・シェルスクリプトA起動時に、/var/runにPIDを書いたファイル(shella.pid)を書き出す。終了時に削除する ・シェルスクリプトB起動時に前述のファイルがあるかどうかをチェックする って感じでした 異常終了したりしてPIDファイルが残ったりするとダメですが シェルスクリプトA自身でもファイルの存在をチェックすれば2重起動の防止にもなります 単純に、 > シェルスクリプトの先頭で、ある資源のロックを行い、終了時にロックの解放ができれば、その仕組みは実現可能と考えています。 の「ある資源」=ファイルで実現しているだけですね
お礼
回答ありがとうございます。 #1のかたの方法で試してみますが、それで、だめな場合の候補とさせていただきます。
お礼
回答ありがとうございます。lockfileコマンドがあるとは知りませんでした。これでやってみます。