Supervisor使用问题

之前介绍了Supervisor的特征,使用方式等基本内容,当时我也是刚使用,感觉流程比较顺利,接着就需要写个shell脚本将Supervisor的安装、配置新建、启动关闭等内容自动化,遇到了一些使用问题,这里记录一下。

unix:///var/run/supervisor.sock no such file

在使用supervisor时,需要注意,supervisor由两个部分组成,通常启动服务端部分就可以了,即使用如下命令则可

  1. supervisord -c /x1_game/fla843/src/supervisord.conf

不要与下面命令搞混了

  1. supervisorctl -c /x1_game/fla843/src/supervisord.conf

该命令用于启动客户端交互模式,在交互模式下可以直接使用下面的命令

  1. > status # 查看程序状态
  2. > stop program_name # 关闭 program_name 程序
  3. > start program_name # 启动 program_name 程序
  4. > restart program_name # 重启 program_name 程序
  5. > reread # 读取有更新(增加)的配置文件,不会启动新添加的程序,也不会重启任何程序
  6. > reload # 载入最新的配置文件,停止原有的进程并按照新的配置启动
  7. > update # 重启配置文件修改过的程序,配置没有改动的进程不会收到影响而重启

但其实完全不必去使用,直接使用supervisorctl + 对应的指令则可,如下:

  1. $ supervisorctl status
  2. $ supervisorctl stop program_name
  3. $ supervisorctl start program_name
  4. $ supervisorctl restart program_name
  5. $ supervisorctl reread
  6. $ supervisorctl reload
  7. $ supervisorctl update

当然出现 unix:///var/run/supervisor.sock no such file的原因还有一个常见的原因就是没有使用root权限运行supervisorctl,造成这一现象,很可能是 /var目录只有root才有相应的写权限,你可以使用 sudo supervisord-c xxx.conf的形式启动supervisord。

http://localhost:9001 refused connection

该错误出现也是非常奇怪,本人第一次安装使用supervisord时,并没有出现这个错误,查询了相关资料,说3.0后supervisord就需要修改相应的配置,以开启相应的端口,需要修改的配置内容如下:

  1. [inet_http_server]
  2. port = 127.0.0.1:9001
  3. [rpcinterface:supervisor]
  4. supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

然后将已经开启的supervisor直接kill掉,再次启动,则不会出现这个错误了

封装多一层

工作需求,这种东西还是要通过shell封装一层,更加方便使用

这里提供安装、启动与关闭的脚本供于参考

安装脚本inst.sh

  1. #!/bin/sh
  2. sudo pip install supervisor

服务启动脚本start.sh

  1. #! /bin/bash
  2. isrun(){
  3. psid=`ps aux | grep supervisord | grep -v grep | wc -l`
  4. echo ${psid}
  5. echo "$1"
  6. if [ ${psid} -gt "$1" ] ;then
  7. echo "supervisord is running!"
  8. exit 0
  9. fi
  10. }
  11. if [ "$1" ] ;then
  12. # if input parameter has supervisord
  13. result=$(echo $1 | grep "supervisord")
  14. if [[ "$result" != "" ]] ;then
  15. isrun 2
  16. else
  17. isrun 0
  18. fi
  19. # the config file path is specified
  20. supervisord -c "$1"
  21. else
  22. isrun 0
  23. supervisord
  24. fi
  25. echo "supervisord start success"

使用supervisorctl工具

  1. #! /bin/bash
  2. psid=`ps aux | grep "superviosrd" | grep -v "grep" | wc -l`
  3. if [ ${psid} -lt 1 ] ;then
  4. echo "superviosrd is not run, place start superviosrd first!"
  5. exit 0
  6. fi
  7. supervisorctl "$1" "$2"

关闭supervisor服务,这种关闭方式,会将这个服务都关闭

  1. #! /bin/bash
  2. psid=`ps aux | grep "supervisord" | grep -v "grep" | wc -l`
  3. echo ${psid}
  4. if [ ${psid} -eq 0 ] ;then
  5. echo "superviosrd is close!"
  6. exit 0
  7. fi
  8. # supervisor will close and all child process also will close
  9. supervisorctl shutdown
    原文作者:HackPython
    原文地址: https://zhuanlan.zhihu.com/p/52596501
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞