人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

シェルスクリプト(/bin/sh)で排他処理をしたいです。
良い方法はありませんか?

●質問者: まんた☆彡
●カテゴリ:コンピュータ
✍キーワード:/bin/sh シェルスクリプト 排他
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● s-shige
●0ポイント

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”

◎質問者からの返答

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


2 ● ito-yu
●30ポイント

http://www.linux.or.jp/JM/html/gnumaniak/man1/mv.1.html

Manpage of MV

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

◎質問者からの返答

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

検討してみます。


3 ● shampoohat
●30ポイント

http://katsu.watanabe.name/article/260.txt

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


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


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


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

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

http://docs.hp.com/ja/B2355-90913/ch08s05.html

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

ご参考に。

◎質問者からの返答

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

ここで閉めます。

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ