Bash で排他ロック
〜 資源を共有 〜
2024-11-11 作成 福島
TOP > shell > bash-exlock
[ TIPS | TOYS | OTAKU | LINK | MOVIE | CGI | AvTitle | ConfuTerm | HIST | AnSt | Asob | Shell ]

Bash で排他ロックって、ほとんどの人は「一体、何を言ってるんだ?」だろうけど、必要になったんだから仕方がない。
排他ロックなんて、いまさら公開するまでも無いですが、無くすたびに思い出すのが面倒なのでここに書いておきます。
ロックファイルにはディレクトリを使用しているので Unix、Windows を問わず使えます。
(WSLCygwin を Windows と言って良いかは知らないけど)

また、以前掲載した Python 用PHP 用十進 BASIC 用の排他ロックと連携することもできます。
商用/非商用を問わず、自由にコピーして使ってください。

最近、サーバにも SSD を使うことが増えてきました。
SSD のシステムではストレージに負荷をかけないよう、ロックファイルの保存先として
Linux では tmpfs を、Windows では RAM ディスクを使用してください。
(Solaris では /tmp のマウント先が保障されていないので、ramdiskadm -a idisk xxG しないといけない)


exLock.sh 文字コードは UTF-8 です。

使い方は、 ./lock_tmp/ (777) というディレクトリを作成したとして、こんな感じ

#!/bin/bash

source ./exLock.sh
LOCKPATH=./lock_tmp/lock.LK

ExLock_lock $LOCKPATH ; ISLOCK=$? 

if [ $ISLOCK -eq 1 ]; then
    # ロック中に実行する処理
fi

ExLock_unlock $LOCKPATH $ISLOCK

Bash も、こねくり回せばクラスっぽく記述できるけど、今さら Ratfor でもないので、やめておきます。
(デバッグしにくくなるのは回避したい)