python之supervisord启动脚本
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
最新文章
- arcgis api for js共享干货系列之一自写算法实现地图量算工具
- 编译安装PHP的参数 --with-mysql --with-mysqli --with-apxs2默认路径
- java 判断String 是否为空
- 你知道吗?使用任何HTML5开发工具都可开发iOS、Android原生App
- php示例代码之empty函数
- Leetcode 290 Word Pattern STL
- Spring中使用Quartz
- MySQL锁监视器
- VS2005中SetUnhandledExceptionFilter函数应用
- spring的组成
- 将控制台程序做成windows服务
- Git Server和sourceTree客户端使用说明
- 【技术分享】BurpSuite 代理设置的小技巧
- 使用kqueue的str_cli函数
- PyCharmMarkdown插件的方法
- Mysql 远程连接服务器
- ajax请求成功 但是被error拦截
- JMeter学习(二十九)自动化badboy脚本开发技术(转载)
- python第二十二课——list函数
- Error: No resource found that matches the given name (at 'icon' with value '@mipmap/Icon')
热门文章
- IE=EmulateIE8和IE=IE8的区别
- 【转】Android-Universal-Image-Loader 图片异步加载类库的使用(超详细配置)
- 用jQuery解决弹出层的问题
- 729 - The Hamming Distance Problem
- Java带包编译运行
- python flask model 序列化
- Effective Objective-C 2.0 Reading Notes
- BZOJ 3930: [CQOI2015]选数 递推
- UVA 12897 Decoding Baby Boos 暴力
- VK Cup 2012 Qualification Round 1 C. Cd and pwd commands 模拟