シェルスクリプト(/bin/sh)で排他処理をしたいです。

良い方法はありませんか?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/11/30 15:06:06
  • 終了:--

回答(3件)

id:s-shige No.1

s-shige回答回数1ベストアンサー獲得回数02005/11/30 17:20:59

http://homepage3.nifty.com/books/fc3/spamassassin2.html

Fedora Core 3による自宅サーバー構築(CUIベース)

こんなのでいいでしょうか?


#!/bin/sh

if [ -f ”lockfile” ]; then exit

else touch ”lockfile”

fi

#

# process still running

#

rm ”lockfile”

id:hfuku

ロックファイルのチェックと作成を同時に行わないとどうしても抜けが発生するので正しい排他が行えません。

2005/11/30 18:00:27
id:ito-yu No.2

ito-yu回答回数323ベストアンサー獲得回数142005/11/30 20:18:52

ポイント30pt

もともとlockfileを作っておいて、排他処理の先頭でmv lockfile lockfile.locked などとする。成功していれば処理開始(当然、処理終了後にmv lockfile.locked lockfileする)。失敗した場合他の処理が動いていると判定し、停止。

id:hfuku

なるほどなかなかよさそうです。

検討してみます。

2005/12/01 13:48:39
id:shampoohat No.3

shampoohat回答回数347ベストアンサー獲得回数02005/11/30 23:08:06

ポイント30pt

回答者は「シェルの素人」です。下記、自己責任でお読みください。


よくロックはcreat(2)で見たいな話だけは聴いたことがあるように思っていたのですが、シェルだと直接使えないんですね。


ふるーい資料ですが、mkdir(1)しておけばまだ安心っていう議論がありましたのでご参考に。


ちょっと格好悪いですが、特に見栄えが気にならなければこれで良いのでは?

(「シェル 排他制御」でgoogleをかけて2番目に出てきたURLですので、ご存知かもしれませんが…。)

creatに関してgoogleしたときに出てきたのですが、「セキュリティ上、setuidをrootにするときは、creat(2)でロックファイルを作るな」と書いてあります。

ご参考に。

id:hfuku

--------------------------------------

ここで閉めます。

やはり、ロックファイルファイル操作のシステムコールで排他をとるのが一般的なようですね。

2005/12/01 14:01:21

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません