良い方法はありませんか?
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”
もともとlockfileを作っておいて、排他処理の先頭でmv lockfile lockfile.locked などとする。成功していれば処理開始(当然、処理終了後にmv lockfile.locked lockfileする)。失敗した場合他の処理が動いていると判定し、停止。
なるほどなかなかよさそうです。
検討してみます。
回答者は「シェルの素人」です。下記、自己責任でお読みください。
よくロックはcreat(2)で見たいな話だけは聴いたことがあるように思っていたのですが、シェルだと直接使えないんですね。
ふるーい資料ですが、mkdir(1)しておけばまだ安心っていう議論がありましたのでご参考に。
ちょっと格好悪いですが、特に見栄えが気にならなければこれで良いのでは?
(「シェル 排他制御」でgoogleをかけて2番目に出てきたURLですので、ご存知かもしれませんが…。)
creatに関してgoogleしたときに出てきたのですが、「セキュリティ上、setuidをrootにするときは、creat(2)でロックファイルを作るな」と書いてあります。
ご参考に。
--------------------------------------
ここで閉めます。
やはり、ロックファイルファイル操作のシステムコールで排他をとるのが一般的なようですね。
ロックファイルのチェックと作成を同時に行わないとどうしても抜けが発生するので正しい排他が行えません。