Supervisor使用问题

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容