PHPで書いた常駐型スクリプトをデーモン化したいと思ったら、
PEARのSystem_Daemonというパッケージでできるらしい。
環境は CentOS 6.4 です。
【インストール】
# yum install php-posix
# pear install System_Daemon
# pear install Log
【使い方】
<?php require_once 'System/Daemon.php'; $options = array( 'appName' => 'deamon_name', // デーモンの名前 'appDir' => dirname(__FILE__) // アプリを動かすディレクトリ ); System_Daemon::setOptions($options); System_Daemon::start(); while (!System_Daemon::isDying()) { //log出力 場所は /var/log/デーモン名.log System_Daemon::log(System_Daemon::LOG_INFO, date('Y/m/d H:i:s')); //ここに処理を書く System_Daemon::iterate(1); //sleep } System_Daemon::stop();
とりあえず動作させるだけなら上記のコードでOK
オプションとしてログの出力場所、実行ユーザーの設定が可能。
デフォルトだとログの出力先は「/var/log/デーモン名.log」になり、
実行ユーザーはrootになる。
実行ユーザーを変更したい場合は以下のようにPID, GIDを設定する。
<?php $options = array( 'appName' => 'deamon_name', // デーモンの名前 'appDir' => dirname(__FILE__), // アプリを動かすディレクトリ "appRunAsUID" => 48, "appRunAsGID" => 48 );
ただ、webからアクセスすると、以下のエラーで実行できない。
「PHP is compiled without --enable-pcntl directive」
これを解決するにはPHPをソースからインストールする必要がある。
yumじゃダメみたい。
ってことで、コンソールから直接実行することに・・・・。
いまいち使い勝手が悪いな・・・。