この記事には広告を含む場合があります。
記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。
スクリプトを同時に起動させない方法
定期処理を行う際に使われれる cron 処理にて、スクリプトを同時に起動させない方法をご紹介します。
通常はスクリプトの多重起動は気にしなくても良いですが、短期間で何度も実行するときや実行1回あたりの処理の時間が長いときには非常に有効な対策になります。
スクリプトを多重起動させないコマンド
考え方は簡単で pidof コマンドや ps コマンドを使用して、自分自身が実行されているかを確認します。もし自分が動作していなければ、処理を実行するコマンドへ移行すれば良いという考え方です。
今回は pidof コマンドを実行する際のコマンドの例を記載します。
サンプルコマンド
1 |
/bin/pidof -x (スクリプト名) > /dev/null || sh (スクリプトまでのパス) |
crontab でスクリプトを書くときはフルパスを書くことが基本になります。コマンドのフルパスは which コマンドで確認することができます。
pidof コマンドのフルパスを確認する方法
1 2 |
root@hostname:# which pidof /bin/pidof |
PHP スクリプトの多重起動を防止する
実践例として、需要が多い PHP の定期処理における多重起動を防止してみます。
まずは PHP のフルパスを確認します。
1 2 |
root@hostname:# which php /usr/bin/php |
ドキュメントルート「/var/www/test/」に設置した「helloworld.php」を実行するシェルスクリプトを作成します。
1 2 3 4 |
#! /bin/shell cd /var/www/test/; /usr/bin/php helloworld.php |
最後に crontab に PHP を毎分実行する命令を記載します。
1 |
* * * * * /bin/pidof -x helloworld.php > /dev/null || sh /var/www/helloworld.sh |
さいごに
cron の多重起動を防止する書き方は、豆知識として知っていると得することが多いです。特に同時に起動するとデッドロックする可能性があるプログラムなどには必ず設定して下さいね。
Linuxの知識については下記の本も参考になるので、スキルアップにお役立てください。