lockfile-create によるロックファイルの作成

こんにちは、鈴木です。

 

シェルスクリプトを書くときに、重複起動を防止したくなることがあります。

重複起動を防止する一般的な方法として、ロックファイルを用いる方法があります。

最近 lockfile-progs パッケージ(Debian 系)に含まれるコマンドを利用する方法を知ったのでご紹介します。

 

導入

まずは lockfile-progs パッケージをインストールします。

lockfile-progs パッケージをインストールすると、以下のコマンドが使用できるようになります。

  • lockfile-check
    ロックファイルの存在をチェックする。
  • lockfile-create
    ロックファイルを作成する。
  • lockfile-remove
    ロックファイルを削除する。
  • lockfile-touch
    ロックファイルを一定時間ごとに touch する。

 

サンプルコード

以下にサンプルコードを示します。

最初に lockfile-create でロックファイルを作成します。
オプションの --retry は既にロックファイルが存在する場合のリトライ回数です。
ここでは 0 を指定しているため、既にロックファイルが存在すれば即終了します。

lockfile-remove はロックファイルを削除します。
「trap "lockfile-remove $LOCK_FILE" EXIT」としているのは、
エラーが発生した場合も含めて必ずロックファイルを削除するためです。

lockfile-touch は定期的にロックファイルのタイムスタンプを更新します。
なぜ lockfile-touch でロックファイルのタイムスタンプを更新するのかというと、
lockfile-create はロックファイルのタイムスタンプが 5 分よりも前の場合にロックを横取りするためです。

lockfile-touch はバックグラウンドで実行する必要がある(そうしないと次の処理に進めない)ため、
「lockfile-touch $LOCK_FILE &」と最後に & を付けてバックグラウンドで実行させています。

lockfile-touch した後には、本来行いたかった処理を記述すれば OK です。

 

Comments are closed, but you can leave a trackback: Trackback URL.