揮発性のメモ2

知識をメモ書きしておく

flockコマンドをflock関数みたいに使う 2



flockコマンドをflock関数みたいに使う - 揮発性のメモ


リダイレクトでファイルディスクリプタを指定するとき、番号を直接指定しているのがいやだったけど、
変数名を指定することで自動で空いている番号を使用してくれることがわかった
参考:本を読む execによるリダイレクトで番号を自動で割り振る
※ただしbashでしか使えない技

#!/bin/bash

# ロック (ロックファイル名)
filelock () {
    exec {LOCKFD}>$1
    flock -x $LOCKFD
}

# アンロック
fileunlock () {
    exec {LOCKFD}>&-
}


echo "HEAVEN OR HELL"
filelock /tmp/hoge

echo "LET'S LOCK"
sleep 10

echo "SLASH"
fileunlock
sleep 5

ロック解除するときロックファイルを消してはいけない

Stray Penguin - Linux Memo (BASH)

fileunlock() {
    # Release flock. Argument: lockfile path.
    exec 9<&-
    rm -f $1
}

これはバグです。
ファイルを消してしまうと、次にロックするときに作るロックファイルは同名だけど別ファイルなので、ロック取得できてしまいます。