Bash で排他ロックって、ほとんどの人は「一体、何を言ってるんだ?」だろうけど、必要になったんだから仕方がない。
排他ロックなんて、いまさら公開するまでも無いですが、無くすたびに思い出すのが面倒なのでここに書いておきます。
ロックファイルにはディレクトリを使用しているので Unix、Windows を問わず使えます。
(WSL や Cygwin を Windows と言って良いかは知らないけど)
また、以前掲載した Python 用、PHP 用、十進 BASIC 用の排他ロックと連携することもできます。
商用/非商用を問わず、自由にコピーして使ってください。
最近、サーバにも SSD を使うことが増えてきました。
SSD のシステムではストレージに負荷をかけないよう、ロックファイルの保存先として
Linux では tmpfs を、Windows では RAM ディスクを使用してください。
(Solaris では /tmp のマウント先が保障されていないので、ramdiskadm -a idisk xxG しないといけない)
exLock.sh 文字コードは UTF-8 です。
使い方は、 ./lock_tmp/ (777) というディレクトリを作成したとして、こんな感じ
Bash も、こねくり回せばクラスっぽく記述できるけど、今さら Ratfor でもないので、やめておきます。
#!/bin/bash source ./exLock.sh LOCKPATH=./lock_tmp/lock.LK ExLock_lock $LOCKPATH ; ISLOCK=$? if [ $ISLOCK -eq 1 ]; then # ロック中に実行する処理 fi ExLock_unlock $LOCKPATH $ISLOCK