Supervisord是用Python实现的一款非常实用的进程管理工具,在批量服务化管理时特别有效。可以将非Daemon的应用转为daemon程序。关于supervisord的安装和配置,在网上已经有很多现成的帖子,我这里就不重复了。

在centos和rhel的环境下,我们一般是用chkconfig来管理服务的启动停止、开机自启动等。下面我列出Supervisord的服务脚本。

1. 执行如下命令:

vim /etc/init.d/supervisord

2.输入如下内容:

注意:该文件中的如下几个变量,都需要根据你实际的目录来改写。

PREFIX=/usr/local

SUPERVISORD=$PREFIX/bin/supervisord      ##supervisord   程序的安装路径

SUPERVISORCTL=$PREFIX/bin/supervisorctl  ##supervisorctl 程序的安装路径

PIDFILE=/var/supervisor/supervisord.pid   ##需要先创建/var/supervisor目录

LOCKFILE=/var/supervisor/supervisord.lock

OPTIONS="-c /etc/supervisord.conf"   ##配置文件的路径

#!/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
fi # 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 ))
fi fi
done
fi # 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
fi
;;
*)
echo $"Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart}"
exit 1
esac exit $RETVAL

保存完毕之后,可以执行以下命令修改文件权限:

chmod 777 /etc/init.d/supervisord

/etc/init.d/supervisord  start

这样,supervisor就启动了。

3. 配置开机启动

执行以下命令:

chkconfig supervisord  on

可以以下命令查看是否成功

chkconfig --list | grep  supervisord

最新文章

  1. arcgis api for js共享干货系列之一自写算法实现地图量算工具
  2. 编译安装PHP的参数 --with-mysql --with-mysqli --with-apxs2默认路径
  3. java 判断String 是否为空
  4. 你知道吗?使用任何HTML5开发工具都可开发iOS、Android原生App
  5. php示例代码之empty函数
  6. Leetcode 290 Word Pattern STL
  7. Spring中使用Quartz
  8. MySQL锁监视器
  9. VS2005中SetUnhandledExceptionFilter函数应用
  10. spring的组成
  11. 将控制台程序做成windows服务
  12. Git Server和sourceTree客户端使用说明
  13. 【技术分享】BurpSuite 代理设置的小技巧
  14. 使用kqueue的str_cli函数
  15. PyCharmMarkdown插件的方法
  16. Mysql 远程连接服务器
  17. ajax请求成功 但是被error拦截
  18. JMeter学习(二十九)自动化badboy脚本开发技术(转载)
  19. python第二十二课——list函数
  20. Error: No resource found that matches the given name (at 'icon' with value '@mipmap/Icon')

热门文章

  1. IE=EmulateIE8和IE=IE8的区别
  2. 【转】Android-Universal-Image-Loader 图片异步加载类库的使用(超详细配置)
  3. 用jQuery解决弹出层的问题
  4. 729 - The Hamming Distance Problem
  5. Java带包编译运行
  6. python flask model 序列化
  7. Effective Objective-C 2.0 Reading Notes
  8. BZOJ 3930: [CQOI2015]选数 递推
  9. UVA 12897 Decoding Baby Boos 暴力
  10. VK Cup 2012 Qualification Round 1 C. Cd and pwd commands 模拟