5. 排他制御¶
排他制御として使用可能な方法を以下に示します。
ディレクトリを用いた排他制御
ファイルのロックを用いた排他制御 (FEFS/LLIOで同じ動作になります。)
5.1. ディレクトリを用いた排他制御¶
ディレクトリの有無によって、排他制御を行う方法です。排他処理のコード例を以下に示します。
#!/bin/bash
LOCK_DIR=./lock
# ロックディレクトリの確認と作成
while :
do
mkdir $LOCK_DIR > /dev/null 2>&1
if [ $? -ne 0 ]; then
sleep 10
continue
fi
break
done
# 排他処理を記載
# スクリプトが途中で終了した場合、ロックディレクトリが残らないように注意が必要。
# ロックディレクトリの削除
rmdir $LOCK_DIR
5.2. ファイルのロックを用いた排他制御¶
ファイルのロックを用いて、排他制御を行う方法です。 排他処理のコード例を以下に示します。
#!/bin/bash
LOCK_FILE=./file.lock
#ロックファイルを作成
touch ${LOCK_FILE}
{
flock 9 # 排他ロックを取得できるまで待つ
#排他処理を記載
} 9>$LOCK_FILE
flockコマンドの使い方や注意点については、オンラインマニュアルを参照してください。