tomoya-k31
6/17/2014 - 3:28 PM

排他制御と、ミリ秒で開始時間と終了時間を取得。

排他制御と、ミリ秒で開始時間と終了時間を取得。

#!/bin/sh

LOCK_TMP_DIR=/Users/tomo/.lock
LOCK_FILE_NAME=".lock"
TIMESTAMP_FILE_NAME=".ts"
LOCKFILE=timer.lock

# -pでなければ作る(標準エラーは出力しない)
mkdir -p $LOCK_TMP_DIR

# 数値1 -ne 数値2   数値1と数値2が等しくない場合に真
if [ $? -ne 0 ]; then
    echo "mkdir error"
    exit 1;
fi

# 排他制御
lockfile -r 0 $LOCK_TMP_DIR/$LOCKFILE
if [ $? -ne 0 ]; then
    # error終了
    echo "起動済みのため終了"
    exit 1
fi


unlock() {
    echo "解除"
    rm -f $LOCK_TMP_DIR/$LOCKFILE
}
unset(){
    unset LOCK_TMP_DIR
    unset LOCK_FILE_NAME
    unset TIMESTAMP_FILE_NAME
    unset LOCKFILE
    unset START_TIME
    unset END_TIME
}


# 終了時にunlock
# Ctrl+Cを押しても実行される
# 複数のコマンドを指定するには「;」で区切り、コマンド全体を""で囲む
trap "unlock;unset" EXIT;

# [ls -1]は検索したファイルを1ファイル1行でリスト表示
for var in `ls -1 ${LOCK_TMP_DIR}`
do
    # -n 文字列 文字列の長さが0より大きければ真
    # ! 文字列  文字列の長さが0であれば真
    if [ ! "${var##*${TIMESTAMP_FILE_NAME}}" ]; then
        START_TIME=${var%${TIMESTAMP_FILE_NAME}}
        echo "OK! Get startTime."
    fi
done

# 初回起動分
if [ ! ${START_TIME} ]; then
    START_TIME=$(printf '%ld000' $(expr `date -v-1H +%s`))
    echo "Created startTime."
    touch $LOCK_TMP_DIR/${START_TIME}${TIMESTAMP_FILE_NAME}
fi

END_TIME=$(printf '%ld000' $(expr `date +%s`))

echo "start:"$START_TIME
echo "end:  "$END_TIME


# Main
sleep 5;

# Mainでエラーならロックファイルをそのままにして終了
if [ $? -ne 0 ]; then
    trap EXIT;
    exit 1;
fi

rm -f $LOCK_TMP_DIR/${START_TIME}${TIMESTAMP_FILE_NAME}
touch $LOCK_TMP_DIR/${END_TIME}${TIMESTAMP_FILE_NAME}

exit 0;