ログってなんぼ

日々のメモです

cronジョブの多重起動を「setlock」を使って抑止する

cronjobの多重起動を抑止するためOS側でできることを探していて

qiita.com

こちらのエントリに行き当たる

setlockコマンドのオプション解説についても詳しく記載されているのでおすすめエントリです

daemontoolsのインストール

setlockコマンドはdaemontoolsのインストールで使用可能になるとのこと

バイナリパッケージは無いようなので、上記エントリの通りインストール

上記サイトで行っているインストール作業を一行ずつ読んで理解したうえで作業開始

mkdir -p /package
chmod 1755 /package
cd /package
wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
tar xvzf daemontools-0.76.tar.gz
cd admin/daemontools-0.76
wget http://www.qmail.org/moni.csi.hu/pub/glibc-2.3.1/daemontools-0.76.errno.patch
patch -p1 < daemontools-0.76.errno.patch
package/install

環境によっては依存ライブラリを別途インストールする必要があるかもしれないですが、当方の環境ではさくっと導入できました

setlock_test.rbという名前で適当なスクリプトを書いてテスト開始

実行中にlsofしてみると

$ lsof | grep ".lock"
ruby      26968 okisanjp    3wW     REG                8,3         0   539537 /home/okisanjp/setlock_test.lock

ロックファイルを掴んでいました

$ setlock -Xn ~/setlock_test.lock ruby setlock_test.rb
setlock: fatal: unable to lock /home/sebastian/setlock_test.lock: temporary failure

1つ目が実行中に2つ目を実行しようとしたらエラーとなりました

想定通りの動作をしています