シェルスクリプトで排他処理

Linux

運用サーバで、2分おきにsubversionのupdateを行うシェルスクリプトを動かしています。
今までは、1回のupdateが50秒程度で終了するので、同時実行を防ぐための排他処理をしていませんでした。しかし、サーバの負荷が高かったときは2分以内で終わらない場合があるためスクリプト実行の排他処理をしなければなりません。

Webを調べているとシェルスクリプトでロック用のディレクトリを作ってます。しかし、かっこわるい。。。そこで見つけたのがlockfileというコマンド。このコマンドを使った方がロック取得を失敗したときの挙動を変えられるから便利そうです。(今回の場合は意味無いけど)

以下にコード書いておきます。

#!/bin/sh

LOCKFILE=/tmp/subversion.locked

# try to get lock. With no retry.
lockfile -r 0 $LOCKFILE

# evaluate return code
if [ $? -ne 0 ]; then
  echo "Command aborted"
  exit 1
fi

# do something exclusive command
echo "important command"

# unlock
rm $LOCKFILE

コメント