python supervisor使用


supervisor可以非常方便的管理后台持续运行的进程,在后台进程挂掉之后自动拉起并发出通知等

安装supervisor

1. easy_install supervisor 或pip install supervisor

  • 如果另外安装了python3导致安装supervisor可执行文件目录变化找不到命令,可临时设置一下可执行文件目录

    • 临时设置:export PATH=$PATH:/usr/local/python3/bin可执行文件目录

    • 永久设置:修改/etc/profile文件(对所有用户有效,而修改当前用户下的.bash_profile文件对当前yoghurt有效),加export PATH=$PATH:/usr/local/python3/bin, source /etc/profile重载立即生效

2. 生成默认配置文件/etc/supervisor/supervisord.conf

  • mkdir /etc/supervisor

  • echo_supervisord_conf > /etc/supervisor/supervisord.conf

  • 默认文件路径

    • 默认配置文件:/etc/supervisord.conf

    • 进程管理配置文件放到:/etc/supervisord.d/目录下

    • 默认日志文件:/tmp/supervisord.log,可以查看进程的启动信息

3. 配置文件修改

  • 参考官方地址 http://supervisord.org/configuration.html

  • 参考如下文章
    配置示例

4. 项目配置文件管理

  • 进程管理配置参数,不建议全都写在supervisord.conf文件中,应该每个进程写一个配置文件放在include指定的目录下包含进supervisord.conf文件中

    • 创建/etc/supervisor/config.d目录,用于存放进程管理的配置文件

    • 修改/etc/supervisor/supervisord.conf中的include参数,将/etc/supervisor/config.d目录添加到include中,files = /etc/supervisor/config.d/*.conf

使用supervisor

1. 启动服务端

  • supervisord -c /etc/supervisor/supervisord.conf # 指定配置文件目录启动

  • 设置开机启动,根据网上教程有多种方法

    • 1.配置systemctl服务

      • 进入/lib/systemd/system目录,并创建supervisor.service文件

      • 设置开机启动

        • systemctl enable supervisor.service

        • systemctl daemon-reload

      • 修改文件权限为766,chmod 766 supervisor.service

    • 2.配置service类型服务

      • 参考https://blog.csdn.net/xyang81/article/details/51555473

2. 客户端使用

  • 交互终端: supervisorctl

    • supervisorctl -c /etc/supervisor/supervisord.conf # 指定配置文件目录启动交互终端

    • help/start/stop等命令

  • shell命令

    • supervisorctl status 查看状态

    • supervisorctl update 更新配置

    • pervisorctl stop program_name 停止某个进程

    • supervisorctl start program_name 启动某个进程, 不停supervisor 添加program

    • supervisorctl restart program_name 重启某个进程

    • supervisorctl stop all 关闭所有进程

    • supervisorctl reload 重新启动配置中的所有程序

    • supervisorctl update 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启

  • web管理端

    • 默认关闭,修改supervisord.conf配置文件打开,[inet_http_server] 项
  • 常见错误

    • unix:///tmp/supervisor.sock no such file 未指定配置文件或客户端和服务端配置文件不一致导致

      • supervisorctl -c /etc/supervisor/supervisord.conf start xxx保持配置文件一致即可(不加配置文件默认为/etc/supervisord.conf 依据安装时的选择)
      • 如果以上无法解决,可能是由于tmp目录下文件被其他程序或系统清理导致,需要修改配置文件中的相关目录,参考以下
        file=/var/run/supervisor.sock   ; (the path to the socket file)
        logfile=/var/log/supervisord.log ; (main log file;default $CWD/supervisord.log)
        pidfile=/var/run/supervisord.pid ;
        serverurl=unix:///var/run/supervisor.sock;
        赋予文件夹权限
        sudo chmod 777 /run
        sudo chmod 777 /var/log
        
    • supervisorctl error (no such process) 可能是[include]前的;未取消或files后紧接了;导致的

event 通知提醒

  • 参考http://supervisord.org/events.html

  • http://talk.withme.me/?p=318


本文参考
[1]:https://www.jianshu.com/p/ac6c84a2f415
[2]:http://talk.withme.me/?p=318
[3]:http://supervisord.org/ “官网”


版权声明:本文为jieli_原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。