代码改变世界

2018-05-17 supervisord进程管家

2018-05-17 17:18  受匕图灵  阅读(225)  评论(0编辑  收藏  举报

supervisord进程管家

1) 安装meld3和supervisor:
]$ wget https://files.pythonhosted.org/packages/45/a0/317c6422b26c12fe0161e936fc35f36552069ba8e6f7ecbd99bbffe32a5f/meld3-1.0.2.tar.gz
]$ wget https://files.pythonhosted.org/packages/44/60/698e54b4a4a9b956b2d709b4b7b676119c833d811d53ee2500f1b5e96dc3/supervisor-3.3.4.tar.gz
]$ tar -zxvf meld3-1.0.2.tar.gz
]$ tar -zxvf supervisor-3.3.4.tar.gz
]$ cd meld3-1.0.2
]$ sudo python setup.py install --record log
]$ cd ../supervisor-3.3.4
]$ sudo python setup.py install --record log
]$ echo_supervisord_conf        #没写错,是下划线连接。如果成功,会显示一个superviscord_conf 的配置模板。

2)生成配置文件:
]$ su -
]# echo_supervisord_conf > /etc/supervisord.conf

3)添加自启动服务脚本并添加到服务:
]# vi /etc/init.d/supervisord
内容见附录。
]# chmod +x /etc/init.d/supervisord
]# mkdir -p /var/log/supervisor
]# chkconfig --add supervisord
]# chkconfig --list supervisord

4.1) 生成守护实例脚本:
]# mkdir /backups
]# vim /backups/backup.sh

#!/bin/bash
source="/etc /home /root /var/lib /var/spool/{cron,at,mail}"
target="/backups/backup-system-$(date +%Y-%m-%d).tar.gz"
[ ! -d /backups ] && mkdir /backups
tar -zcvf ${target} ${source} &> /backups/backup.log

]# chmod a+x /backups/backup.sh

4.2)修改配置文件,并在末尾添加守护:
]# echo "[program:backup]" >> /etc/supervisord.conf
]# echo "command=/backups/backup.sh" >> /etc/supervisord.conf

4.3)重新载入supervisord.conf
supervisorctl reload

5)删除supervisord:
cat /home/`whoami`/meld3-1.0.2/log |sudo xargs rm -rf
cat /home/`whoami`/supervisor-3.3.4/log |sudo xargs rm -rf
sudo rm -rf ./meld3-1.0.2/
sudo rm -rf ./supervisor-3.3.4/

6)相关命令(xxx为服务名):
supervisorctl reload        #在修改supervisord.conf后使用。重新载入supervisord.conf
supervisorctl start xxx
supervisorctl restart xxx
supervisorctl stop xxx
supervisorctl update
supervisorctl status


附录。/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