スクリプトを同時に起動させない方法
定期処理を行う際に使われれる cron 処理にて、スクリプトを同時に起動させない方法をご紹介します。
通常はスクリプトの多重起動は気にしなくても良いですが、短期間で何度も実行するときや実行1回あたりの処理の時間が長いときには非常に有効な対策になります。
Advertisement
スクリプトを多重起動させないコマンド
考え方は簡単で 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 |
Advertisement
さいごに
cron の多重起動を防止する書き方は、豆知識として知っていると得することが多いです。特に同時に起動するとデッドロックする可能性があるプログラムなどには必ず設定して下さいね。
Linuxの知識については下記の本も参考になるので、スキルアップにお役立てください。

Author:しき 投稿一覧
奈良県在住のエンジニア。アルバイトでゲーム開発に携わりIT業界入り。組み込みや業務系のソフト開発を経験して、その後レンタルサーバー会社にてインターネットの根幹の知識を得る。今ではスマホアプリの開発やWeb開発、インフラの構築に従事中。
関連する記事
web開発カテゴリの最新記事
-
- 2021.12.11
気象庁JSON ファイルにある weatherCode 一覧
-
- 2021.12.06
- php,
[PHP]Deprecated (非推奨)エラーを解除する方法
-
iPhone / iPad にて電話番号に自動で紐づくリンクを無効化する方法
-
- 2021.12.11
- javascript, プログラミング,
Javascript/jQuery にて指定の日時でページを更新する
-
- 2021.12.11
- ツール,
Poderosa にて入力(出力)が二重で表示される問題の対処法
-
- 2021.12.11
- javascript, nodejs,
Node.js にて対話モードを開始&終了する方法