原创如何利用supervisord做进程守护

玩技站长
玩技站长
玩技站长
管理员, Keymaster
10824
文章
669
评论
运维笔记评论911字数 842阅读2分48秒阅读模式

原创如何利用supervisord做进程守护插图

1、介绍

Supervisor是一个进程管理工具,官方的说法用途就是有一个进程需要每时每刻不断的跑,但是这个进程又有可能由于各种原因有可能中断。当进程中断的时候我希望能自动重新启动它,此时,我就需要使用到了Supervisor文章源自玩技e族-https://www.playezu.com/16227.html

这个工具主要就两个命令:文章源自玩技e族-https://www.playezu.com/16227.html

supervisord : supervisor的服务器端部分,启动supervisor就是运行这个命令

supervisorctl:启动supervisor的命令行窗口。

2、安装

1)第一种方法:文章源自玩技e族-https://www.playezu.com/16227.html

pip install  supervisor

2)pip的安装文章源自玩技e族-https://www.playezu.com/16227.html

 1 cat  pip_an.sh 
 2 #!/bin/bash
 3 wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz
 4 tar zxvf setuptools-0.6c11.tar.gz
 5 cd setuptools-0.6c11
 6 python setup.py build
 7 python setup.py install
 8 wget "https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz#md5=834b2904f92d46aaa33326"
 9 tar -xzvf pip-1.5.4.tar.gz
10 cd pip-1.5.4
11 python setup.py install

文章源自玩技e族-https://www.playezu.com/16227.html

第二种文章源自玩技e族-https://www.playezu.com/16227.html

yum install python-setuptools
easy_install supervisor

第三种文章源自玩技e族-https://www.playezu.com/16227.html

wget https://pypi.python.org/packages/source/s/supervisor/supervisor-3.1.3.tar.gz
tar zxvf supervisor-3.1.3.tar.gz
cd supervisor
python setup.py install

第四种文章源自玩技e族-https://www.playezu.com/16227.html

yum install -y epel-release
yum install -y supervisor

3、测试

#测试是否安装成功文章源自玩技e族-https://www.playezu.com/16227.html

echo_supervisord_conf

#创建配置文件文章源自玩技e族-https://www.playezu.com/16227.html

echo_supervisord_conf > /etc/supervisord.conf

#编辑配置文件

vim /etc/supervisord.conf

4、自定义配置

1)打开supervisord.cong文件后,在最后面加入

[program:ss]   #ss为程序的名称
command=dotnet ProjectName.dll ; 运行程序的命令
directory=/root/Publishing/PublishOutput/ ; 命令执行的目录
autorestart=true ; 程序意外退出是否自动重启
autostart=true ; 是否自动启动
stderr_logfile=/var/log/ProjectName.err.log ; 错误日志文件
stdout_logfile=/var/log/ProjectName.out.log ; 输出日志文件
environment=ASPNETCORE_ENVIRONMENT=Production ; 进程环境变量
user=root ; 进程执行的用户身份
stopsignal=INT
startsecs=1 ; 自动重启间隔 

5、supervisord 常用操作

以下命令均需要root权限

supervisorctl status #查看守护程序状态
supervisorctl stop nginx #停止nginx
supervisorctl start nginx #启动nginx
supervisorctl restart nginx #重启 nginx 程序
supervisorctl reread #读取有更新(增加)的配置文件,但不会启动新添加的程序
supervisorctl update #重启配置文件修改过的程序

6、为了方便管理,我们可以添加到添加自动启动服务

vim /etc/init.d/supervisord
#!/bin/bash
#
# supervisord   This scripts turns supervisord on
#
# Author:       Mike McGrath <mmcgrath@redhat.com> (based off yumupdatesd)
#
# chkconfig:    - 95 04
#
# description:  supervisor is a process control utility.  It has a web based
#               xmlrpc interface as well as a few other nifty features.
# processname:  supervisord
# config: /etc/supervisord.conf
# pidfile: /var/run/supervisord.pid
#
# source function library
. /etc/rc.d/init.d/functions
RETVAL=0
start() {
        echo -n $"Starting supervisord: "
        daemon supervisord
        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] &amp;& touch /var/lock/subsys/supervisord
}
stop() {
        echo -n $"Stopping supervisord: "
        killproc supervisord
        echo
        [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/supervisord
}
restart() {
        stop
        start
}
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart|force-reload|reload)
        restart
        ;;
  condrestart)
        [ -f /var/lock/subsys/supervisord ] && restart
        ;;
  status)
        status supervisord
        RETVAL=$?
        ;;
  *)
        echo $"Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart}"
        exit 1
esac
exit $RETVAL

给予执行权限:

chmod +x /etc/init.d/supervisord

这样我们就可以通过service命令管理supervisord了

如果想管理ss进程,应该用

supervisorctl {start|stop|restart} ss

查看ss在后台的状态:

ps -ef | grep servers.py

7、如何开启图形界面

1.修改配置

将supervisord.conf 中的一段配置更改如下
[supervisorctl]
serverurl=0.0.0.0:9001    ; use an http:// url to specify an inet socket
username=chris              ; should be same as in [*_http_server] if set
password=123                ; should be same as in [*_http_server] if set

2.开启端口

firewall-cmd --query-port=9001/tcp          //监测端口是否开启
firewall-cmd --add-port=9001/tcp            //开启9001端口
firewall-cmd --remove-port=9001/tcp       //关闭9001端口
sudo firewall-cmd --reload                        //重新加载配置

8、常见问题

1、unix:// /var/run/supervisord.sock

echo_supervisord_conf > /etc/supervisord.conf
sudo supervisord -c /etc/supervisord.conf
sudo supervisorctl status
 最后更新:2022-12-22
匿名

发表评论

匿名网友
确定

拖动滑块以完成验证