supervisor でプロセスを監視、自動開始 cakephp編

2014年10月11日更新 view: 137 view
photoBy: http://plataform.files.wordpress.com/2011/01/supe…

supervisor でプロセスを監視しよう

nginxやapachなどは monit で監視できる。
ただ、 node.js や backgroud.php などバックグラウンドで動くプログラムは
supervisorで動かすべき。

参考:
http://qiita.com/zaru/items/1b58210f604de0219773

インストール方法

sudo yum install python-setuptools
sudo easy_install supervisor

easy install でインストールせず、yumでインストールするとバージョンが古くバグる。
error: <class 'socket.error'> というエラーが出る。
場合によって yum update などもしてね。
supervisor のバージョンは 3.0-0.5.a10.el6 以上をおすすめ。

botサンプル

詳しくは
http://www.matomater.com/17073/

<?php

App::uses('Shell', 'Console');

class BotShell extends AppShell {

    public function main() {
        $worker = new GearmanWorker();
        $worker->addServer('127.0.0.1');
        $worker->addFunction('sakasa', array($this, 'gyaku'));
        while ($worker->work());
    }

    public function gyaku($job)
    {
        $str = $job->workload();//hideki
        return strrev($str);
    }

}

botがちゃんと動くかチェック。

/var/www/html/your/app/Console/cake -working /var/www/html/your/app -app /var/www/html/your/app Bot

こうなってればok

成功
Welcome to CakePHP v2.5.3 Console
---------------------------------------------------------------
App : app
Path: /var/www/html/mntra.net/app/
---------------------------------------------------------------

この時点でエラーになるようでは、次からの処理はうまく動かないので注意。

ファイルを設定

/etc/supervisord.conf

設定は、このファイルだけでOK

[unix_http_server]
file=/var/run/supervisor.sock

[supervisord]
logfile=/var/log/supervisord.log
loglevel=info
pidfile=/var/run/supervisord.pid

; the below section must remain in the config file for RPC
; (supervisorctl/web interface) to work, additional interfaces may be
; added by defining them in separate rpcinterface: sections
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///var/run/supervisor.sock


[program:cakebot]
command=/var/www/html/your/app/Console/cake -working /var/www/html/your/app -app /var/www/html/your/app Bot
redirect_stderr=true
stdout_logfile=/var/log/cakebot.log
autostart=true
autorestart=true
user=root

開始

sudo service supervisord restart
sudo supervisorctl status

思ったように動かなければ、すぐにログを見る。
vim /var/log/cakebot.log

注意

cakephp側の設定でIP振り分け系を使っているとバグの原因になるので注意。

スポンサードリンク

cakephp core.php

Configure::write('debug', 0);
    if(isset($_SERVER)){

        if ($_SERVER['REMOTE_ADDR'] == '124.9995.120.198' || $_SERVER['REMOTE_ADDR'] == '111.169.49.285'){ //ローカルの場合デバッグモード

            if(preg_match('/Chrome/',$_SERVER['HTTP_USER_AGENT'])){
                Configure::write('debug', 2);
            }

        } else {

            if(!isset($_SERVER['SHELL']) && !isset($_SERVER["SUPERVISOR_ENABLED"])){
                echo "ただ今開発中です";
                exit;
            }
        }

    }

$_SERVER["SUPERVISOR_ENABLED"]
を持っている場合は、正常に動作するようにしておく。

supervisord自体の自動起動

checkconfig

サーバーを再起動した際に、自動で起動するように。
関連のプロセスも自動で立ち上がる。

sudo chkconfig --add supervisord
sudo chkconfig supervisord on

落ちたら自動再起動 upstart

新規でファイル作成

・vim /etc/init/supervisord.conf

description "supervisord"

start on runlevel [2345]
stop on runlevel [!2345]

respawn
script
exec /usr/bin/supervisord -n -c /etc/supervisord.conf
end script

設定OK?

sudo initctl reload-configuration
sudo initctl list | grep super

okなら起動してみる

sudo initctl start supervisord

うまく動かない場合は?

shellscriptをエラーのまま動かしてしまったり、shell自体にエラーがある場合は自動的にプロセスが立ち上がらない。
その場合は、
botを削除、supervisordを再起動

pkill -f Bot
sudo initctl restart supervisord

でもって、プロセスが立ち上がっているか確認。

ps ax | grep Bot
スポンサードリンク

関連記事

関連カテゴリ

コロ助

web関連の記事や制作系の記事をどんどんまとめていきます。 宜しくお願いします!

ピックアップ

パソコン・ソフトウェア ランキング

2月23日 ( 金 ) にアクセスが多かった記事はこちら!