Supervisord进程管家
Supervisord進(jìn)程管家
Supervisord是一個(gè)守護(hù)進(jìn)程的工具,當(dāng)進(jìn)程意外終止或服務(wù)器掉電起來(lái)后,希望進(jìn)程能夠自動(dòng)運(yùn)行,supervisord可以很好的為我們做這件事情。同時(shí)supervisord也自帶監(jiān)控界面,可以通過(guò)瀏覽器靈活的查看、操作。
以安徽storm快數(shù)據(jù)系統(tǒng)為例,20臺(tái)服務(wù)器總計(jì)268個(gè)進(jìn)程(不包括CDH hadoop集群進(jìn)程),全部由supervisord接管。
?
?
1)? 首先安裝meld3和supervisor:
下載地址
https://pypi.python.org/pypi/meld3
https://pypi.python.org/pypi/supervisor
tar xfz meld3-1.0.2.tar.gz
cd meld3-1.0.2
python setup.py install
?
python setup.py install安裝報(bào)錯(cuò)
[root@localhost meld3-1.0.2]# python setup.py install
Traceback (most recent call last):
File "setup.py", line 1, in ?
from setuptools import setup
ImportError: No module named setuptools
?
解決辦法
http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz
tar zxvf setuptools-0.6c11.tar.gz
cd setuptools-0.6c11
python setup.py build
python setup.py install
?
?
tar xfz supervisor-3.2.3.tar.gz
cd supervisor-3.2.3
python setup.py install
?
2)生成配置文件:
echo_supervisord_conf > /etc/supervisord.conf
?
3)修改配置文件,并在末尾添加app守護(hù):
vi /etc/supervisord.conf
?
末尾添加app信息:
[program:storm_nimbus]
user=inas
autorestart=true
directory=/home/inas/storm/bin
command=/home/inas/storm/bin/storm nimbus
?
[program:storm_ui]
user=inas
autorestart=true
directory=/home/inas/storm/bin
command=/home/inas/storm/bin/storm ui
?
[program:storm_supervisor]
user=inas
autorestart=true
directory=/home/inas/storm/bin
command=/home/inas/storm/bin/storm supervisor
?
附錄/etc/supervisord.conf? (安徽樣例)
?
4)添加自啟動(dòng)服務(wù)腳本:
vi /etc/init.d/supervisord
詳見(jiàn)附錄/etc/init.d/supervisord
?
5)生成日志目錄并添加到服務(wù)里:
mkdir -p /var/log/supervisor
chmod +x /etc/init.d/supervisord
chkconfig --add supervisord
chkconfig --list supervisord
?
6)相關(guān)命令:
service supervisord start|stop|status|reload|restart
supervisorctl status
supervisorctl start xxx
supervisorctl stop xxx
supervisorctl update
?
7)監(jiān)控頁(yè)面(如需要安全性,也可以設(shè)置賬號(hào)):
http://x.x.x.x:9001
?
?
?
8)FAQ:
Q)由supervisord守護(hù)的進(jìn)程條件?
A)啟動(dòng)命令中不能包含daemon或&后臺(tái)符來(lái)運(yùn)行即可。
?
Q)如果/etc/supervisord.conf里新增加了app,需要重啟supervisord?
A)可以通過(guò)service supervisord restart來(lái)重啟所有app;
也可以通過(guò)supervisorctl update命令來(lái)運(yùn)行新增的app,而原有未改動(dòng)的app不受影響。
?
?
?
?
?
?
?
附錄1:
/etc/supervisord.conf文件樣例:
; Sample supervisor config file.
;
; For more information on the config file, please see:
; http://supervisord.org/configuration.html
;
; Notes:
; ?- Shell expansion ("~" or "$HOME") is not supported.? Environment
;??? variables can be expanded using this syntax: "%(ENV_HOME)s".
;? - Comments must have a leading space: "a=b ;comment" not "a=b;comment".
?
[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=0.0.0.0: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/supervisor/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
?
; The below sample program section shows all possible program subsection values,
; create one or more 'real' program: sections to be able to control them under
; supervisor.
?
;[program:theprogramname]
;command=/bin/cat????????????? ; the program (relative uses PATH, can take args)
;process_name=%(program_name)s ; process_name expr (default %(program_name)s)
;numprocs=1??????????????????? ; number of processes copies to start (def 1)
;directory=/tmp?????????????? ?; directory to cwd to before exec (def no cwd)
;umask=022???????????????????? ; umask for process (default None)
;priority=999????????????????? ; the relative start priority (default 999)
;autostart=true??????????????? ; start at supervisord start (default: true)
;startsecs=1?????????????????? ; # of secs prog must stay up to be running (def. 1)
;startretries=3??????????????? ; max # of serial start failures when starting (default 3)
;autorestart=unexpected??????? ; when to restart if exited after running (def: unexpected)
;exitcodes=0,2???????????????? ; 'expected' exit codes used with autorestart (default 0,2)
;stopsignal=QUIT?????????????? ; signal used to kill process (default TERM)
;stopwaitsecs=10?????????????? ; max num secs to wait b4 SIGKILL (default 10)
;stopasgroup=false???????????? ; send stop signal to the UNIX process group (default false)
;killasgroup=false???????????? ; SIGKILL the UNIX process group (def false)
;user=chrism?????????????????? ; setuid to this UNIX account to run the program
;redirect_stderr=true????????? ; redirect proc stderr to stdout (default false)
;stdout_logfile=/a/path??????? ; stdout log path, NONE for none; default AUTO
;stdout_logfile_maxbytes=1MB?? ; max # logfile bytes b4 rotation (default 50MB)
;stdout_logfile_backups=10???? ; # of stdout logfile backups (default 10)
;stdout_capture_maxbytes=1MB?? ; number of bytes in 'capturemode' (default 0)
;stdout_events_enabled=false?? ; emit events on stdout writes (default false)
;stderr_logfile=/a/path??????? ; stderr log path, NONE for none; default AUTO
;stderr_logfile_maxbytes=1MB?? ; max # logfile bytes b4 rotation (default 50MB)
;stderr_logfile_backups=10???? ; # of stderr logfile backups (default 10)
;stderr_capture_maxbytes=1MB?? ; number of bytes in 'capturemode' (default 0)
;stderr_events_enabled=false?? ; emit events on stderr writes (default false)
;environment=A="1",B="2"?????? ; process environment additions (def no adds)
;serverurl=AUTO??????????????? ; override serverurl computation (childutils)
?
; The below sample eventlistener section shows all possible
; eventlistener subsection values, create one or more 'real'
; eventlistener: sections to be able to handle event notifications
; sent by supervisor.
?
;[eventlistener:theeventlistenername]
;command=/bin/eventlistener??? ; the program (relative uses PATH, can take args)
;process_name=%(program_name)s ; process_name expr (default %(program_name)s)
;numprocs=1??????????????????? ; number of processes copies to start (def 1)
;events=EVENT????????????????? ; event notif. types to subscribe to (req'd)
;buffer_size=10??????????????? ; event buffer queue size (default 10)
;directory=/tmp??????????????? ; directory to cwd to before exec (def no cwd)
;umask=022???????????????????? ; umask for process (default None)
;priority=-1?????????????????? ; the relative start priority (default -1)
;autostart=true??????????????? ; start at supervisord start (default: true)
;startsecs=1?????????????????? ; # of secs prog must stay up to be running (def. 1)
;startretries=3??????????? ????; max # of serial start failures when starting (default 3)
;autorestart=unexpected??????? ; autorestart if exited after running (def: unexpected)
;exitcodes=0,2???????????????? ; 'expected' exit codes used with autorestart (default 0,2)
;stopsignal=QUIT?????????????? ; signal used to kill process (default TERM)
;stopwaitsecs=10?????????????? ; max num secs to wait b4 SIGKILL (default 10)
;stopasgroup=false???????????? ; send stop signal to the UNIX process group (default false)
;killasgroup=false?????? ??????; SIGKILL the UNIX process group (def false)
;user=chrism?????????????????? ; setuid to this UNIX account to run the program
;redirect_stderr=false???????? ; redirect_stderr=true is not allowed for eventlisteners
;stdout_logfile=/a/path??????? ; stdout log path, NONE for none; default AUTO
;stdout_logfile_maxbytes=1MB?? ; max # logfile bytes b4 rotation (default 50MB)
;stdout_logfile_backups=10???? ; # of stdout logfile backups (default 10)
;stdout_events_enabled=false?? ; emit events on stdout writes (default false)
;stderr_logfile=/a/path??????? ; stderr log path, NONE for none; default AUTO
;stderr_logfile_maxbytes=1MB?? ; max # logfile bytes b4 rotation (default 50MB)
;stderr_logfile_backups=10???? ; # of stderr logfile backups (default 10)
;stderr_events_enabled=false?? ; emit events on stderr writes (default false)
;environment=A="1",B="2"?????? ; process environment additions
;serverurl=AUTO??????????????? ; override serverurl computation (childutils)
?
; The below sample group section shows all possible group values,
; create one or more 'real' group: sections to create "heterogeneous"
; process groups.
?
;[group:thegroupname]
;programs=progname1,progname2? ; each refers to 'x' in [program:x] definitions
;priority=999????????????????? ; the relative start priority (default 999)
?
; The [include] section can just contain the "files" setting.? This
; setting can list multiple files (separated by whitespace or
; newlines).? It can also contain wildcards.? The filenames are
; interpreted as relative to this file.? Included files *cannot*
; include files themselves.
?
;[include]
;files = relative/directory/*.ini
?
[program:zookeeper]
user=inas
autorestart=true
command=/usr/java/default/bin/java -Dzookeeper.log.dir=/home/inas/zookeeper-3.4.8/bin -Dzookeeper.root.logger=INFO,CONSOLE -cp /home/inas/zookeeper-3.4.8/build/classes:/home/inas/zookeeper-3.4.8/build/lib/*.jar:/home/inas/zookeeper-3.4.8/lib/slf4j-log4j12-1.6.1.jar:/home/inas/zookeeper-3.4.8/lib/slf4j-api-1.6.1.jar:/home/inas/zookeeper-3.4.8/lib/netty-3.7.0.Final.jar:/home/inas/zookeeper-3.4.8/lib/log4j-1.2.16.jar:/home/inas/zookeeper-3.4.8/lib/jline-0.9.94.jar:/home/inas/zookeeper-3.4.8/zookeeper-3.4.8.jar:/home/inas/zookeeper-3.4.8/src/java/lib/*.jar:/home/inas/zookeeper-3.4.8/conf:.:/usr/java/default/lib/dt.jar:/usr/java/default/lib/tools.jar: -Xms4096m -Xmx4096m -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false org.apache.zookeeper.server.quorum.QuorumPeerMain /home/inas/zookeeper-3.4.8/conf/zoo.cfg
?
[program:storm_nimbus]
user=inas
autorestart=true
command=/home/inas/storm/bin/storm nimbus
?
[program:storm_ui]
user=inas
autorestart=true
command=/home/inas/storm/bin/storm ui
?
[program:storm_supervisor]
user=inas
autorestart=true
command=/home/inas/storm/bin/storm supervisor
?
[program:haproxy]
user=inas
autorestart=true
directory=/home/inas/haproxy
command=/home/inas/haproxy/haproxy -f haproxy_supervisord.cfg
?
[program:tomcat1]
user=inas
autorestart=true
directory=/home/inas/tomcat1/bin
command=/home/inas/tomcat1/bin/catalina.sh run
?
[program:tomcat2]
user=inas
autorestart=true
directory=/home/inas/tomcat2/bin
command=/home/inas/tomcat2/bin/catalina.sh run
?
?
附錄2
/etc/init.d/supervisord 文件樣例:
#!/bin/bash
#
# supervisord?? Startup script for the Supervisor process control system
#
# Author:?????? Mike McGrath <mmcgrath@redhat.com> (based off yumupdatesd)
#?????????????? Jason Koppe <jkoppe@indeed.com> adjusted to read sysconfig,
#?????????????????? use supervisord tools to start/stop, conditionally wait
#?????????? ????????for child processes to shutdown, and startup later
#?????????????? Erwan Queffelec <erwan.queffelec@gmail.com>
#?????????????????? make script LSB-compliant
#
# chkconfig:??? 345 83 04
# description: Supervisor is a client/server system that allows \
#?? its users to monitor and control a number of processes on \
#?? UNIX-like operating systems.
# processname: supervisord
# config: /etc/supervisord.conf
# config: /etc/sysconfig/supervisord
# pidfile: /var/run/supervisord.pid
#
### BEGIN INIT INFO
# Provides: supervisord
# Required-Start: $all
# Required-Stop: $all
# Short-Description: start and stop Supervisor process control system
# Description: Supervisor is a client/server system that allows
#?? its users to monitor and control a number of processes on
#?? UNIX-like operating systems.
### END INIT INFO
?
# Source function library
. /etc/rc.d/init.d/functions
?
# Source system settings
if [ -f /etc/sysconfig/supervisord ]; then
??? . /etc/sysconfig/supervisord
fi
?
# Path to the supervisorctl script, server binary,
# and short-form for messages.
supervisorctl=/usr/bin/supervisorctl
supervisord=${SUPERVISORD-/usr/bin/supervisord}
prog=supervisord
pidfile=${PIDFILE-/var/run/supervisord.pid}
lockfile=${LOCKFILE-/var/lock/subsys/supervisord}
STOP_TIMEOUT=${STOP_TIMEOUT-60}
OPTIONS="${OPTIONS--c /etc/supervisord.conf}"
RETVAL=0
?
start() {
??? echo -n $"Starting $prog: "
??? daemon --pidfile=${pidfile} $supervisord $OPTIONS
??? RETVAL=$?
??? echo
??? if [ $RETVAL -eq 0 ]; then
??????? touch ${lockfile}
????? ??$supervisorctl $OPTIONS status
??? fi
??? return $RETVAL
}
?
stop() {
??? echo -n $"Stopping $prog: "
??? killproc -p ${pidfile} -d ${STOP_TIMEOUT} $supervisord
??? RETVAL=$?
??? echo
??? [ $RETVAL -eq 0 ] && rm -rf ${lockfile} ${pidfile}
}
?
reload() {
??? echo -n $"Reloading $prog: "
??? LSB=1 killproc -p $pidfile $supervisord -HUP
??? RETVAL=$?
??? echo
??? if [ $RETVAL -eq 7 ]; then
??????? failure $"$prog reload"
??? else
??????? $supervisorctl $OPTIONS status
??? fi
}
?
restart() {
??? stop
??? start
}
?
case "$1" in
??? start)
??????? start
??????? ;;
??? stop)
??????? stop
??????? ;;
??? status)
??????? status -p ${pidfile} $supervisord
??????? RETVAL=$?
??????? [ $RETVAL -eq 0 ] && $supervisorctl $OPTIONS status
??????? ;;
??? restart)
??????? restart
??????? ;;
??? condrestart|try-restart)
??????? if status -p ${pidfile} $supervisord >&/dev/null; then
????????? stop
????????? start
??????? fi
??????? ;;
??? force-reload|reload)
??????? reload
??????? ;;
??? *)
??????? echo $"Usage: $prog {start|stop|restart|condrestart|try-restart|force-reload|reload}"
??????? RETVAL=2
esac
?
exit $RETVAL
?
轉(zhuǎn)載于:https://www.cnblogs.com/chenjunjie/p/7793924.html
總結(jié)
以上是生活随笔為你收集整理的Supervisord进程管家的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 做梦梦到自己怀孕了大肚子是怎么回事
- 下一篇: 梦到自然灾害是什么征兆