1. Supervisor is a C/S system, which allows users to monitor and control the number of background service processes in Unix-like operating systems. A very important function is to monitor the main background processes of the server, and automatically restart when a problem occurs.
2. Download the corresponding setuptools according to the python version on the server
[root@test1 ~]# python -V
Python 2.6.6
wget http://pypi.python.org/packages/2.6/s/setuptools/setuptools-0.6c11-py2.6.egg#md5=bfa92100bd772d5a213eedd356d64086
direct installation
sh setuptools-0.6c11-py2.6.egg
3. Download and install supervisor
wget http://pypi.python.org/packages/source/s/supervisor/supervisor-3.0b1.tar.gz
tar -zxvf supervisor-3.0b1.tar.gz
cd supervisor-3.0b1
python setup.py install
After installing setuptools you can also
easy_install supervisor
4. Set the supervisor configuration file
Create a default configuration file
echo_supervisord_conf >/etc/supervisord.conf
vi /etc/supervisord.conf
Uncomment the following and modify the IP to 0.0.0.0
[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))
Add a custom background process (note that the process names are separated by a :)
[program:hello] command=python /root/hello.py priority=1 numprocs=1 autostart=true autorestart=true startretries=10 stopsignal=KILL stopwaitsecs=10 redirect_stderr=true stdout_logfile=/root/hello.log
5. Execute the following command:
vi /etc/init.d/supervisord
6. Enter the following:
Note: The following variables in this file need to be rewritten according to your actual directory.
PREFIX=/usr/local
SUPERVISORD=$PREFIX/bin/supervisord ##Installation path of the supervisord program
SUPERVISORCTL=$PREFIX/bin/supervisorctl ##Installation path of the supervisorctl program
PIDFILE=/var/supervisor/supervisord.pid ##The /var/supervisor directory needs to be created first
LOCKFILE=/var/supervisor/supervisord.lock
OPTIONS="-c /etc/supervisord.conf" ##Configuration file path
#!/bin/bash # # supervisord This scripts turns supervisord on # chkconfig: 345 83 04 # description: supervisor is a process control utility. It has a web based # xmlrpc interface as well as a few other nifty features. # # source function library . /etc/rc.d/init.d/functions set -a PREFIX=/usr/local SUPERVISORD=$PREFIX/bin/supervisord SUPERVISORCTL=$PREFIX/bin/supervisorctl PIDFILE=/var/supervisor/supervisord.pid LOCKFILE=/var/supervisor/supervisord.lock OPTIONS="-c /etc/supervisord.conf" # unset this variable if you don't care to wait for child processes to shutdown before removing the $LOCKFILE-lock WAIT_FOR_SUBPROCESSES=yes # remove this if you manage number of open files in some other fashion ulimit -n 96000 RETVAL=0 running_pid() { # Check if a given process pid's cmdline matches a given name pid=$1 name=$2 [ -z "$pid" ] && return 1 [ ! -d /proc/$pid ] && return 1 (cat /proc/$pid/cmdline | tr "\000" "\n"|grep -q $name) || return 1 return 0 } running() { # Check if the process is running looking at /proc # (works for all users) # No pidfile, probably no daemon present [ ! -f "$PIDFILE" ] && return 1 # Obtain the pid and check it against the binary name pid=`cat $PIDFILE` running_pid $pid $SUPERVISORD || return 1 return 0 } start() { echo "Starting supervisord: " if [ -e $PIDFILE ]; then echo "ALREADY STARTED" return 1 be # start supervisord with options from sysconfig (stuff like -c) $SUPERVISORD $OPTIONS # show initial startup status $SUPERVISORCTL $OPTIONS status # only create the subsyslock if we created the PIDFILE [ -e $PIDFILE ] && touch $LOCKFILE } stop() { echo -n "Stopping supervisord: " $SUPERVISORCTL $OPTIONS shutdown if [ -n "$WAIT_FOR_SUBPROCESSES" ]; then echo "Waiting roughly 60 seconds for $PIDFILE to be removed after child processes exit" for sleep in 2 2 2 2 4 4 4 4 8 8 8 8 last; do if [ ! -e $PIDFILE ] ; then echo "Supervisord exited as expected in under $total_sleep seconds" break else if [[ $sleep -eq "last" ]] ; then echo "Supervisord still working on shutting down. We've waited roughly 60 seconds, we'll let it do its thing from here" return 1 else sleep $sleep total_sleep=$(( $total_sleep + $sleep )) be be done be # always remove the subsys. We might have waited a while, but just remove it at this point. rm -f $LOCKFILE } restart() { stop start } case "$1" in start) start RETVAL=$? ;; stop) stop RETVAL=$? ;; restart|force-reload) restart RETVAL=$? ;; reload) $SUPERVISORCTL $OPTIONS reload RETVAL=$? ;; condrestart) [ -f $LOCKFILE ] && restart RETVAL=$? ;; status) $SUPERVISORCTL $OPTIONS status if running ; then RETVAL=0 else RETVAL=1 be ;; *) echo $"Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart}" exit 1 esac exit $RETVAL
After saving, you can execute the following command to modify the file permissions:
chmod 777 /etc/init.d/supervisord
/etc/init.d/supervisord start
In this way, the supervisor is started.
7. Configure boot up
Execute the following commands:
chkconfig supervisord on
You can check the success with the following command
chkconfig --list | grep supervisord