2012-03-05

LINUX - 把寫好的 php 包成 daemon

evn
  • suse 11
  • php v5.2.13

shell
#!/bin/bash

PROG="PHP Daemon"
PHP_CODE="/home/www/scripts/Daemon.php"
test -x $PHP_CODE || exit 0RETVAL=0

. /etc/rc.status

rc_reset

case "$1" in
    start)
        echo -n "Starting $PROG"
        startproc $PHP_CODE
        rc_status -v
        ;;
    stop)
        echo -n "Shutting down $PROG"
        killproc -TERM $PHP_CODE
        rc_status -v
        ;;
    restart)
        echo -n "Restarting service $PROG"
        $0 stop
        $0 start
        rc_status
        ;;
    status)
        echo -n "Checking for service $PROG"
        checkproc $PHP_CODE
        rc_status -v
        ;;
    *)
    echo "Usage: $0 {start|stop|restart|status}"
    exit 1
    ;;
esac
rc_exit

php (第一行 #!/home/php/bin/php 一定要加)
#!/home/php/bin/php
?php
try {
    $dest = Default_Model_Medium::AMQ_DNAME;
    $con = new Stomp(AMQ_URL);
    $con->setReadTimeout(300); // 設定每 5 分鐘檢查訊息
    $con->connect();
    $con->subscribe('/queue/'.$dest);
    while (true) {
        $msg = $con->readFrame();
        if (empty($msg)) {
            Util_Reporter::log("wait amq server…", '/home/logs/php/api.log');
            continue;
        }
        $msgBody = json_decode($msg->body, true);
        $con->ack($msg);

        if ($msgBody==null) {
            Util_Reporter::log("msgBody is null", '/home/logs/php/vlog_api.log');
        } else {
            // 主程式放這裡
        }
    }
    $con->disconnect();

} catch (StompException $e) {
    Util_Reporter::log("StompException:".$e->getMessage(), '/home/logs/php/vlog_api.log');
    exit;
}
?

啟動指令
su wwwrun -c 'sh /home/www/HiNet_Vlog/scripts/CloudboxConsumer.sh start >> /home/logs/php/vlog_api.log'
su wwwrun -c 'sh /home/www/HiNet_Vlog/scripts/CloudboxConsumer.sh stop'
su wwwrun -c 'sh /home/www/HiNet_Vlog/scripts/CloudboxConsumer.sh status'

以上, 這樣就可以 run 了
但不知是否程式哪裡沒寫好, daemon 會一直死掉....
暫時只好寫個 cron 用 ps 去檢查, 若 daemon 死掉了, 就再自己啟動.....



cf : http://www.godlikemouse.com/2011/03/31/php-daemons-tutorial/





2 則留言:

  1. 跑了幾天, 結果 service 會一直掛...
    只好改回原本的執行方式,
    以 shell 來控制 /home/php/bin/php {code} 比較穩...

    回覆刪除
  2. 可以參考 http://blog.darkhero.net/archives/406

    回覆刪除