#!/bin/bash

# Bash 用排他ロック関数
# exLock.sh Version 1.00 written by fuku@rouge.gr.jp

# 使い方
# source ./exLock.sh
# LOCKPATH=./lockPath.LCK
#
# ExLock_lock $LOCKPATH ; ISLOCK=$?
# if [ $ISLOCK -eq 1 ]; then
#   ロック中に実行する処理
# fi
# ExLock_unlock $LOCKPATH $ISLOCK

# 排他ロックファイルを作成する
function ExLock_lock() {

    lockpath=$1

    # 3 分以上前に作成されたロックファイルを削除する
    # ※何らかの原因で残ったままになったロックファイル
    if [ -e $lockpath ]; then
        timeStamp=`date +%s -r $lockpath`
        limit=$((`date +%s` - 180))
        if [ $timeStamp -le $limit ]; then
            rmdir $lockpath > /dev/null 2>&1
        fi
    fi

    # ロックファイルを作成してみる
    # ※5回やってダメなら失敗とする
    isLock=0
    for i in 1 2 3 4 5 ; do
        mkdir $lockpath > /dev/null 2>&1
        res=$?
        if [ $res -eq 0 ]; then
            isLock=1    # ロックを自分で作ったという印
            break
        fi
        sleep 0.2
    done

    return $isLock
}

# 排他ロックファイルを削除する
function ExLock_unlock() {
    lockpath=$1
    isLock=$2
    if [ $isLock == 1 ]; then
        # 自分で作ったロックファイルなら消す
        rmdir $lockpath > /dev/null 2>&1
    fi
}

