[PHP-users 34774] Re: sleep関数が復帰せずプロセスがダウンする

HOTTA Michihide hotta @ net-newbie.com
2009年 9月 17日 (木) 11:14:07 JST


堀田@長崎市です。

On Thu, 17 Sep 2009 10:10:35 +0900 
Yuji KUBOTA <kubota.yuji @ forestgroup.net> wrote:
Subject: [PHP-users 34771] Re: sleep関数が復帰せずプロセスがダウンする

> >> 定期的に処理を実行するプログラムをプロセスとして常駐化させ
> >> 利用したと考えています。
> > 
> > レンタルサーバーとか厳しい制約があるんでしたっけ。
> 自己運営サーバーなので基本的にはサーバーに関する制限はなしです。
> 開発環境としてPHPで統一しておきたいと言う理由です。

参考になるかどうかはわかりませんが、私の職場(大学)では多数の
バッチ処理を php CLI で運用しています。一例を挙げると

root @ gtr:~# cat /var/spool/cron/phpuser
(略)
#--------------------------------------------------------------------------
# 入退室状況表示対象研究室ステータスの取得
#--------------------------------------------------------------------------
*/1 * * * * $HOME/lc_view/progs/get_roomstat.php
#--------------------------------------------------------------------------
# 情報演習室におけるログイン状況の取得
#--------------------------------------------------------------------------
*/5 * * * * $HOME/get_smbstatus.sh >> /tmp/get_smbstatus.log >&/dev/null
#--------------------------------------------------------------------------
# 年次更新
#--------------------------------------------------------------------------
0 0 1 4 * $HOME/lc_view/progs/annual_update.php

それぞれ1分間に1回、5分間に1回、年に一回の処理です。

スクリプトの中身はいろいろ(オラクルやポスグレにアクセスしたり、
ssh 経由でいろんなサーバを巡回したり、メールを送ったり)ですが、
いずれにせよ、処理が終わったら単に終了すればいい(非常駐型)ので
プログラムが単純になり、保守性も向上します。Web アプリじゃないの
でセッションなどの状態遷移も意識する必要がない分、可読性もよく、
ブラウザも不要です。昔の COBOL の感覚です。

cron とシェルの使い方を覚えれば、いろいろと応用が利きますよ。

独立した処理を連続してやりたければ、複数の php スクリプトをまと
めて実行するシェルスクリプト(上記の get_smbstatus.shがそれ)を
作って cron に登録する、などという具合です。

エンドユーザに見せたい画面だけを Web アプリとして開発し、参照す
る DB の中身は CLI が生成/更新する、という使い方が多いです。

> > 常駐化なら、やはり常駐プロセスとしてプログラムを
> > 作成するのが正攻法だと思います。
> そのように見直すべきかとも考え始めております。
> それにしても、なぜプロセスがダウンするかの原因は明確にして
> おきたいと考えています。

もし対象が制御系だったり、監視系(インターバルが1分以内)だった
りする場合は、常駐型にならざるを得ないかもしれません。その場合で
も CLI ならデバッグも楽だし、apache の介在がなくなるので、原因の
絞り込みも少しは楽になるかもです。

-- 
HOTTA Michihide <hotta @ net-newbie.com>


PHP-users メーリングリストの案内