[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 メーリングリストの案内