Re: cron で複数の起動を防止する方法
In article <ci5m2m$ipr$1@news-est.ocn.ad.jp>,
tsuyama@be.to writes:
> シェルスクリプトの作り方がよくわからなかったので,かなり適当
> ですが,これで今のところうまく動いているみたいです。
うーん。これだと、[ -f $LOCK ] を終えて touch $LOCK までの一瞬の間に、
他のプロセスが [ -f $LOCK ] を通過してしまう可能性がありますね。…と一瞬
考えましたが、5分毎に動かすスクリプトの相互排除ならこれでも十分なのか。
[ -f $LOCK ] から touch $LOCK までに5分かからない限り。
もしその可能性まで考えて厳密に相互排除をやるなら、[ -f $LOCK ] と
touch $LOCK に相当することを一まとめにやらなければならないですね。
if bash -c "set -o noclobber; : > $LOCK" 2>/dev/null; then
:
else
exit 1
fi
/usr/local/bin/isbg.py
rm -f $LOCK
という感じですかね。
ただ、何かの理由でプロセスが死んでロックファイルだけが残った場合にどう
するかという厄介な問題は度外視して考えてますが。
それから、procmailのおまけにlockfileというコマンドがあって、それを使う
こともできます。こちらは、ロックファイルが存在していてもそれがある程度以
上古ければ、削除してしまうということもできます。
ちなみにcshにはset noclobberがありますが、もともとのshにはそれに相当す
るものって確かないんですよね。私にとって唯一、cshのshに対する優位点と感
じられる点です。
nide@ics.nara-wu.ac.jp
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735