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コマンドの使い方や注意点については、オンラインマニュアルを参照してください。