hollyさんのwiki

daemontoolsとかmonitっぽいやつ http://supervisord.org/. centosでの導入手順。ここが詳しい。http://webos-goodies.jp/archives/deploying_tornado...

事前準備

なければ実行すること
yum install python-setuptools

install

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/*.conf
include 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

inittab

supervisordをinit経由で起動するようにする
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 supervisord
supervisordが起動。killしても復活するかも確認する

supervisorctl

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
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

event

http://supervisord.org/events.html いろいろと定義されている

install

easy_install superlance

crashmail

プロセスが異常終了した時に検知する。SuperVisorでイベント監視(crashmail編)が詳しかった。
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

設定

kyototycoon

すでに書いてるけど
[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

magent

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

munin-node

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

nginx

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

postgresql

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

pgpool

[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

karesansui

マイナー。なぜか動かなくなった
[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

crashmail

# -p は複数設定可能
command=/usr/bin/crashmail -p kyototycoon -p munin-node -p nginx -m your_email
events=PROCESS_STATE_EXITED

Wiki内検索

Menu

ここは自由に編集できるエリアです。

管理人/副管理人のみ編集できます