こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

シェルスクリプト間で排他をとりたい

環境 linux(redhat) 使用シェル bash
シェルスクリプトAとシェルスクリプトBを作成し、
シェルスクリプトAが動作している間は、シェルスクリプトBの動作を禁止したいと考えています。
例えば、シェルスクリプトAが起動している状態で、シェルスクリプトBが起動されたとき、シェルスクリプトBは、シェルスクリプトAが起動していることを検知して、自発的に処理を終了するようにしたいと考えています。
上記のような仕組みをシェルスクリプトで実現可能でしょうか?
基本的には、シェルスクリプトの先頭で、ある資源のロックを行い、終了時にロックの解放ができれば、その仕組みは実現可能と考えています。
(シェルの異常終了時は、ロックが自動的に解放されることが望ましい)
上記のようなことをシェル(bash)で実現可能でしょうか。
bash単独での方法、もしくはbashからperl,C言語作成の実行モジュールを呼び出す方法でもかまいません。
(ちなみにperl(もしくはC言語作成のモジュール)単独では実現可能なことはわかっています)

投稿日時 - 2009-02-27 11:06:50

QNo.4753175

すぐに回答ほしいです

質問者が選んだベストアンサー

lockfileコマンドでいけるのではないかと。
詳しくはman lockfileをご覧下さい。

ただ、異常終了時は少し困りますね。
trapコマンドでシグナルを捕捉することはできますが、
SIGKILLは捕捉できないです。
まぁ、どうしようもないですが。

投稿日時 - 2009-02-27 21:30:47

お礼

回答ありがとうございます。lockfileコマンドがあるとは知りませんでした。これでやってみます。

投稿日時 - 2009-02-27 22:06:23

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

自分がよく使っていた方法としては、

・シェルスクリプトA起動時に、/var/runにPIDを書いたファイル(shella.pid)を書き出す。終了時に削除する
・シェルスクリプトB起動時に前述のファイルがあるかどうかをチェックする

って感じでした
異常終了したりしてPIDファイルが残ったりするとダメですが
シェルスクリプトA自身でもファイルの存在をチェックすれば2重起動の防止にもなります

単純に、

> シェルスクリプトの先頭で、ある資源のロックを行い、終了時にロックの解放ができれば、その仕組みは実現可能と考えています。

の「ある資源」=ファイルで実現しているだけですね

投稿日時 - 2009-02-27 21:34:25

お礼

回答ありがとうございます。
#1のかたの方法で試してみますが、それで、だめな場合の候補とさせていただきます。

投稿日時 - 2009-02-27 22:13:12

あなたにオススメの質問