daemontoolsとかmonitっぽいやつ http://supervisord.org/. centosでの導入手順。ここが詳しい。http://webos-goodies.jp/archives/deploying_tornado...
easy_instalでインストール。pythonだが、rootで動かすようなものなので、わざわざpythonbrewいれたりする必要はない。めんどいし
easy_install supervisor
雛形から作成する
設定内容はいろいろあるが、必要最低限の設定にする
echo_supervisord_conf > /etc/supervisord.confその他
mkdir /etc/supervisord.d mkdir /var/log/supervisord
設定内容はいろいろあるが、必要最低限の設定にする
[unix_http_server] file=/tmp/supervisor.sock ; (the path to the socket file) ;chmod=0700 ; socket file mode (default 0700) ;chown=nobody:nogroup ; socket file uid:gid owner ;username=user ; (default is no username (open server)) ;password=123 ; (default is no password (open server)) [inet_http_server] ; inet (TCP) server disabled by default port=127.0.0.1:9001 ; (ip_address:port specifier, *:port for all iface) ;username=user ; (default is no username (open server)) ;password=123 ; (default is no password (open server)) [supervisord] logfile=/var/log/supervisord.log ; (main log file;default $CWD/supervisord.log) logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB) logfile_backups=10 ; (num of main logfile rotation backups;default 10) loglevel=info ; (log level;default info; others: debug,warn,trace) pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid) nodaemon=false ; (start in foreground if true;default false) minfds=1024 ; (min. avail startup file descriptors;default 1024) minprocs=200 ; (min. avail process descriptors;default 200) ;umask=022 ; (process file creation umask;default 022) ;user=chrism ; (default is current user, required if root) ;identifier=supervisor ; (supervisord identifier, default is 'supervisor') ;directory=/tmp ; (default is not to cd during start) ;nocleanup=true ; (don't clean up tempfiles at start;default false) ;childlogdir=/tmp ; ('AUTO' child log dir, default $TEMP) ;environment=KEY=value ; (key value pairs to add to environment) ;strip_ansi=false ; (strip ansi escape codes in logs; def. false) ; 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:///tmp/supervisor.sock ; use a unix:// URL for a unix socket serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket ;username=chris ; should be same as http_username if set ;password=123 ; should be same as http_password if set ;prompt=mysupervisor ; cmd line prompt (default "supervisor") ;history_file=~/.sc_history ; use readline history if available [include] files = /etc/supervisord.d/*.confinclude sectionで指定したディレクトリに監視するデーモンごとの設定をおいていけばよい
設定内容は適当だけど。/etc/supervisord.d/kyototycoon.conf。細かい設定はデフォルトにまかせる(ログローテートなど)
[program:kyototycoon] command=/usr/local/kyototycoon/bin/ktserver process_name=%(program_name)s autostart=true autorestart=true user=kt directory=/var/lib/kt stdout_logfile=/var/log/supervisord/%(program_name)s-stdout.log stderr_logfile=/var/log/supervisord/%(program_name)s-stderr.log
supervisordをinit経由で起動するようにする
↑はふるい。centos6系からはupstartで定義する。/etc/init/supervisord.confとして作成
svd:2345:respawn:/usr/bin/supervisord --nodaemon
↑はふるい。centos6系からはupstartで定義する。/etc/init/supervisord.confとして作成
description "supervisord" start on runlevel [2345] stop on runlevel [!2345] respawn exec /usr/bin/supervisord -n設定後は以下を実行
initctl start supervisordsupervisordが起動。killしても復活するかも確認する
supervisordを制御するコマンド
default commands (type help <topic>): ===================================== add clear fg open quit remove restart start stop update avail exit maintail pid reload reread shutdown status tail version
<daemon>の操作。restart/stop/start
指定daemonの出力内容をtail。tailオプションをそのまま使える。-fとか
<daemon>の設定内容を変更したので再読み込み
supervisordの管理(shutdown/)
status. 監視daemonの状態をみることができる
update. 設定ファイルを追加したり編集したりした時?っぽい
supervisorctl restart <daemon>
指定daemonの出力内容をtail。tailオプションをそのまま使える。-fとか
supervisorctl tail [tail option] <daemon>
<daemon>の設定内容を変更したので再読み込み
supervisorctl reread <daemon>としたがどうも反映されない?っぽいので以下で対応(実質再起動になるが)
supervirctl update <daemon> supervisorctl stop <daemon> supervisorctl remove <daemon> supervisorctl add <daemon>全体を反映させたい場合はsupervisordをhupすればよい
supervisordの管理(shutdown/)
supervisorctl shutdown
status. 監視daemonの状態をみることができる
supervisorct status kyototycoon RUNNING pid 1043, uptime 14 days, 22:45:47
update. 設定ファイルを追加したり編集したりした時?っぽい
supervisorctl update
http://supervisord.org/events.html いろいろと定義されている
プロセスが異常終了した時に検知する。SuperVisorでイベント監視(crashmail編)が詳しかった。
ためしに監視しているdaemonを強制終了すると以下のようなメールが送信された
cat <<EOL >/etc/supervisord.d/crashmail.conf command=/usr/bin/crashmail -p kyototycoon -m xxxxx@xxxx.xxxxx events=PROCESS_STATE_EXITED EOL supervisorctl update
ためしに監視しているdaemonを強制終了すると以下のようなメールが送信された
Process kyototycoon in group kyototycoon exited unexpectedly (pid 28365) from state RUNNING
すでに書いてるけど
[program:kyototycoon] #command=/usr/local/kyototycoon/bin/ktserver command=/usr/local/kyototycoon/bin/ktserver -host 127.0.0.1 -li -plsv /usr/local/kyototycoon/libexec/ktplugservmemc.so -plex 'host=127.0.0.1#opts=f' '/var/lib/kt/data/cabinet.kch#opts=l#bnum=20000000#msiz=500k#dfunit=8' process_name=%(program_name)s autostart=true autorestart=true user=kt directory=/var/lib/kt stdout_logfile=/var/log/supervisord/%(program_name)s-stdout.log stderr_logfile=/var/log/supervisord/%(program_name)s-stderr.log
kyototycoonとセットで使うとよい
# v0.7の場合は command=/usr/local/memagent/bin/magent -c /usr/local/memagent/conf/magent.conf [program:magent] command=/usr/local/bin/magent -p 0 -s 127.0.0.1:11211 -f /tmp/magent.sock -D -k -v process_name=%(program_name)s autostart=true autorestart=true user=holly redirect_stderr=true directory=/home/holly stdout_logfile=/var/log/supervisord/%(program_name)s-stdout.log stderr_logfile=/var/log/supervisord/%(program_name)s-stderr.log
foregroundで動くようにmunin-node.confを設定すること
#background 1 # comment setsid 0としてから以下を設定する
[program:munin-node] command=/usr/sbin/munin-node process_name=%(program_name)s autostart=true autorestart=true user=root directory=/ stdout_logfile=/var/log/supervisord/%(program_name)s-stdout.log stderr_logfile=/var/log/supervisord/%(program_name)s-stderr.log
logはstdout/stderrに出力するようにし、foregroundで動くようにする
error_log /dev/stderr; daemon off; http { # この中のaccess_logの設定がある log_format vhost '$host $remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /dev/stdout vhost; # anything to do... }としてから以下を設定
[program:nginx] command=/usr/sbin/nginx process_name=%(program_name)s autostart=true autorestart=true user=root directory=/ stdout_logfile=/var/log/supervisord/%(program_name)s-stdout.log stderr_logfile=/var/log/supervisord/%(program_name)s-stderr.log
logging_collector = offにしておくこと。またpgpool-IIと組み合わせることになるので、起動順はpostgresがはやくなるようにすること
[program:postgresql] user=postgres command=/usr/local/pgsql/bin/postmaster process_name=%(program_name)s stopsignal=INT directory=/var/lib/pgsql environment=PGDATA=/usr/local/pgsql/data priority=991 autostart=true autorestart=true stdout_logfile=/var/log/supervisord/%(program_name)s-stdout.log stderr_logfile=/var/log/supervisord/%(program_name)s-stderr.log
[program:pgpool] user=postgres command=/usr/local/pgpool/bin/pgpool -n process_name=%(program_name)s directory=/var/lib/pgsql priority=995 stopsignal=INT autostart=true autorestart=true stdout_logfile=/var/log/supervisord/%(program_name)s-stdout.log stderr_logfile=/var/log/supervisord/%(program_name)s-stderr.log
マイナー。なぜか動かなくなった
[program:karesansui] command=/usr/share/karesansui/bin/karesansui.fcgi process_name=%(program_name)s autostart=true autorestart=true user=kss directory=/var/lib/karesansui environment=KARESANSUI_CONF=/etc/karesansui/application.conf,SEARCH_PATH="" stdout_logfile=/var/log/supervisord/%(program_name)s-stdout.log stderr_logfile=/var/log/supervisord/%(program_name)s-stderr.log
タグ
最新コメント