shell_script_with_lockfile_sample.sh
#!/bin/bash # 何かのエラーが発生した時点で、処理を中断 # 未定義の変数を使ったらエラー # 実行したコマンドを標準エラーに出力 set -eux CURRENT=$(cd $(dirname $0);pwd) cd $CURRENT LOCK_FILE=./lockfile/file.lock THRESHOLD=21600 # 6時間(秒) NOW=$(date "+%s") FILE_TIMESTAMP=$(date -r ${LOCK_FILE} +"%s") DELTA_SECONDS=$(($NOW - $FILE_TIMESTAMP)) # 規定の時間を経過していたらロックを無効化 if [ ${DELTA_SECONDS} -gt ${THRESHOLD} ]; then rm -f $LOCK_FILE fi # ロックファイルの確認と作成 if [ ! -f $LOCK_FILE ]; then touch $LOCK_FILE # 排他対象の処理(略) rm -f $LOCK_FILE else echo "LOCKされています。別プロセスで処理中です。" exit 1 fi