排他制御
排他制御をファイルの有無で実現します。
同一シェルでファイル存在確認し、なければファイル生成、あれば処理終了します。最後に必ずファイル削除するロジックです。

#!/usr/bin/bash

#ロックファイル
file="lock"

#排他制御
if [ -e $file ]; then
    exit 1;
else
    touch $file
fi

#
#何らかの処理
#

rm $file
#正常終了
exit 0;

ロックファイルに有効時間を持たせる
上記で作成したファイルに60分という有効時間を持たせたいと思います。何らかの原因でファイルが残ってしまった場合、60分超えていればファイルを無効とします。 無効としますが、処理は行いますのでロックファイルのctimeをtouchコマンドで変更するロジックを追加します。
ファイルの最終更新時間はctimeです。

ls -lc
上記コマンドで表示される時間がctimeになります。60分超えているファイルを探すのはfindコマンドの-cminオプションを使用します。
具体的には以下のようになります。

find lock -cmin 60
これで60分経ったファイルを探します。このコマンドの戻り値はファイルなので、ファイルが存在するかどうかで分岐するシェルにします。

#!/usr/bin/bash

#ロックファイル
file="lock"

#有効時間(分単位)
tm="60"

#排他制御
if [ -e $file ]; then
    #指定時間過ぎたファイルは無効
    if [ -e `find $file -cmin $tm` ]; then
        echo "expired";
        touch $file
    else
        exit 1;
    fi

else
    touch $file
fi

#
#何らかの処理
#

#何らかの処理正常終了
if(($#==0));then
    echo "normal end"

fi

rm $file
#正常終了
exit 0;

Back to top

Information