====== 22 Bash flock 2重起動防止 ======
===== Cronで実行する場合 =====
flock -n /tmp/somthing.lock something.sh
==== 実行例 ====
$ flock -n /tmp/flock.lock sleep 360
「-n」オプションだと、実行せずに終了します。
$ flock -n /tmp/flock.lock echo 'Hello World.'
$
「-x」オプションだと、終了を待って実行します。
300秒後に実行される
$ flock -n /tmp/flock.lock echo 'Hello World.'
$ Hello World.
===== シェル内で実行する場合 =====
ファイルディスクリプタを99にして、すでに存在するかどうかでチェックする
#!/bin/bash
exec 99>/tmp/$(basename $0 .sh).lock
## lockが存在したら終了
flock -n 99
if [ $? -ne 0 ]; then
exit 1
fi
## 終わったらunlock
flock -u /tmp/$(basename $0 .sh).lock
===== オプション =====
-s, --shared 共有ロックを取得します
-x, --exclusive 排他ロックを取得します (既定値)
-u, --unlock ロックを解除します
-n, --nonblock 待機が必要な場合、失敗させるようにします
{{tag>bash flock}}