Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程,并且提供web页面。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。
因为Supervisor是Python开发的,安装前先检查一下系统否安装了Python2.4以上版本。下面以CentOS7,Python2.7版本环境下,介绍Supervisor的安装与配置步聚:
安装supervisor的之前需要安装两个依赖,我这里把需要的安装包上传到/opt/HuaShan/Supervisor目录下。
安装setuptools: setuptools下载
# tar -zxvf setuptools-0.6c11.tar.gz
# cd setuptools-0.6c11
# python setup.py build
# python setup.py install
安装meld3 :meld3下载
# cd /opt/HuaShan/Supervisor
# tar -zxvf meld3-1.0.2.tar.gz
# cd meld3-1.0.2
# python setup.py install
安装supervisor:Supervisor下载
# cd /opt/HuaShan/Supervisor
# tar -zxvf supervisor-3.3.4.tar.gz
# cd supervisor-3.3.4
# python setup.py install
验证supervisor安装是否成功
# supervisorctl --help
1) 创建文件夹和配置文件(root用户)
# mkdir -p /etc/supervisor
# echo_supervisord_conf > /etc/supervisor/supervisord.conf
2) 进程管理配置参数,不建议全都写在supervisord.conf文件中,应该每个进程写一个配置文件放在include指定的目录下包含进supervisord.conf文件中
创建/etc/supervisor/config.d目录,用于存放进程管理的配置文件
# mkdir -p /etc/supervisor/config.d
3) 修改/etc/supervisor/supervisord.conf文件内容, 将/etc/supervisor/conf.d目录添加到include中
# vim /etc/supervisor/supervisord.conf
把 ;[include] 改为 [include]
在文件结尾[include]节点处(*.ini foo.conf config??.ini)
把 ;files = relative/directory/*.ini 改为 files = /etc/supervisor/config.d/*.ini
# grep -n '^'[[a-Z] /etc/supervisor/supervisord.conf //方便查看内容
# cd /etc/supervisor
本文主要讲如何离线安装supervisor,如何配置、使用、页面客户端、启动参考另一篇文章,点击这里
#!/bin/bash
#currentUser=$(whoami)
#if [ "$currentUser" != "root" ];then
# echo "当前用户为非root,请切换用户:${currentUser}"
# exit 1
#fi
# 安装supervisor
function installSupervisor()
{
echo "*安装supervisor"
cd ${currentpath}
mkdir Supervisor
cp -r tools/*.gz Supervisor/
cd Supervisor
#安装setuptools
tar -zxvf setuptools-0.6c11.tar.gz
cd setuptools-0.6c11
python setup.py build
python setup.py install
if [ $? -ne 0 ]; then
echo -e "\033[31m*安装setuptools失败 \033[0m"
return 1
fi
echo "*安装setuptools成功"
#安装meld3
cd ${currentpath}/Supervisor
tar -zxvf meld3-1.0.2.tar.gz
cd meld3-1.0.2
python setup.py install
if [ $? -ne 0 ]; then
echo -e "\033[31m*安装meld3失败 \033[0m"
return 1
fi
echo "*安装meld3成功"
#安装supervisor
cd ${currentpath}/Supervisor
tar -zxvf supervisor-3.3.4.tar.gz
cd supervisor-3.3.4
python setup.py install
#验证supervisor安装是否成功
supervisorctl --help
if [ $? -ne 0 ]; then
echo -e "\033[31m*安装supervisor失败 \033[0m"
return 1
fi
echo "*安装supervisor成功"
#创建文件夹和配置文件
mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf
mkdir -p /etc/supervisor/config.d
sed -i "s/\;\[include\]/\[include\]/g" /etc/supervisor/supervisord.conf
sed -i "s/;files = relative\/directory\/\*.ini/files = \/etc\/supervisor\/config.d\/\*.ini/g" /etc/supervisor/supervisord.conf
if [ $? -ne 0 ]; then
echo -e "\033[31m*配置supervisor失败 \033[0m"
return 1
fi
echo "*配置supervisord.conf成功"
#配置登陆Web页面
echo "[inet_http_server]">> /etc/supervisor/supervisord.conf
echo "port=0.0.0.0:9001">> /etc/supervisor/supervisord.conf
echo "username=admin">> /etc/supervisor/supervisord.conf
echo "password=123456">> /etc/supervisor/supervisord.conf
#拷贝*ini文件到目录下
\cp -r ${currentpath}/config.d/*.ini /etc/supervisor/config.d
if [ $? -ne 0 ]; then
echo -e "\033[31m*拷贝*ini文件到/etc/supervisor/config.d目录失败 \033[0m"
return 1
fi
echo "*拷贝*ini文件到/etc/supervisor/config.d目录成功"
#返回根目录
cd ${currentpath}
return 0
}
# 配置supervisor开机启动
function supervisorSystemd()
{
#将/etc/rc.d/rc.local 文件标记为可以执行文件
chmod +x /etc/rc.d/rc.local
# 判断匹配函数,匹配函数不为0,则包含给定字符
if [ `grep -c "supervisord -c /etc/supervisor/supervisord.conf" /etc/rc.d/rc.local` -eq '0' ];then
echo "*supervisor已配置开机启动"
return
else
#打开 /etc/rc.d/rc.local 文件,在最后添加supervisord -c /etc/supervisor/supervisord.conf
echo "supervisord -c /etc/supervisor/supervisord.conf">> /etc/rc.d/rc.local
echo "*supervisor添加开机自启"
fi
}
echo "*******************************"
echo "* 开始安装 *"
echo "*******************************"
currentpath=$(pwd)
echo "**当前安装目录:" ${currentpath}
# 安装supervisor
installSupervisor
res=`echo $?`
if [ $res = "1" ]; then
exit 1
fi
#添加开机自启
supervisorSystemd
# 启动supervisor
supervisord -c /etc/supervisor/supervisord.conf
if [ $? -ne 0 ]; then
cd ${currentpath}
echo -e "\033[31m启动supervisor失败 \033[0m"
exit 1
fi
echo "*启动supervisor成功"
# 清除安装包
#rm -rf tools
#rm -rf config.d
echo "*******************************"
echo "* 安装完成 *"
echo "*******************************"
编写不易,如果有帮助到您,喜欢点赞!