BLOGTIMES
2012/03/19

bashで多重起動を防止する(その3)

  cli  sh  programming 
このエントリーをはてなブックマークに追加

これまで何度も話題にしてきたシェルスクリプトの多重起動を防止ルーチン*1ですが、 procmail についている lockfile というコマンドを使うとより楽に実装できそうということが分かったので書き直してみました。
こんなストレートなコマンドが存在していたとは盲点でした。

LOCKFILE(1) LOCKFILE(1) NAME lockfile - conditional semaphore-file creator SYNOPSIS lockfile -sleeptime | -r retries | -l locktimeout | -s suspend | -! | -ml | -mu | filename ...

こちらはリトライ回数、リトライ間隔、ロックのタイムアウトが指定できるので、もし何らかの理由でロックファイルが残ってしまってもタイムアウト時間を経過していれば強制的にロックファイルが削除されます。

synchronized.sh

#!/bin/bash BASENAME=`basename $0 .sh` SCRIPT_DIR=`dirname $0` LOCK_FILE="LOCK_${BASENAME}" MAX_RETRY=3 RETRY_INTERVAL=5 LOCK_TIMEOUT=180 cd "$SCRIPT_DIR" lockfile -$RETRY_INTERVAL -r $MAX_RETRY -l $LOCK_TIMEOUT $LOCK_FILE >/dev/null 2>&1 if [ $? -ne 0 ] ; then echo "[ERROR] Lock failed." exit 1 fi trap 'rm -f "$LOCK_FILE"' EXIT # ここに処理を書く sleep 10

トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/4839
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン