参考

  1. 官网 [http://supervisord.org](http://supervisord.org)<br /> [https://www.cnblogs.com/xueweihan/p/6195824.html](https://www.cnblogs.com/xueweihan/p/6195824.html)<br /> [http://liyangliang.me/posts/2015/06/using-supervisor/](http://liyangliang.me/posts/2015/06/using-supervisor/)<br /> [https://www.jianshu.com/p/0b9054b33db3](https://www.jianshu.com/p/0b9054b33db3)

定义

  1. Supervisor 是一个 C/S 模型的程序,supervisord server 端,supervisorctl shell、和网页端 client

安装

  1. apt-get install supervisor
  2. yum install supervisor

查看服务

  1. systemctl status supervisord
  2. supervisord.service - Process Monitoring and Control Daemon
  3. Loaded: loaded (/usr/lib/systemd/system/supervisord.service; disabled; vendor preset: disabled)
  4. Active: inactive (dead)
  5. Docs: http://supervisord.org

配置

配置文件

  1. 配置文件 /etc/supervisord.conf
  2. 配置文件夹 /etc/supervisor.d

子进程配置

子进程配置文件路径 /etc/supervisor.d
新建文件programe.ini
输入以下内容

  1. [program:father]
  2. directory=/run/media/duxin/G/work_space/python_project/process
  3. command=python father.py
  4. autorestart=true
  5. autostart=true
  6. redirect_stderr=true
  7. user=duxin
  8. stdout_logfile_maxbytes=50MB
  9. stdout_logfile_backups=5
  10. stdout_capture_maxbytes=1MB
  11. stdout_events_enabled=false
  12. loglevel=warn

一个进程就配置好了
另一个多组子进程的配置例子

  1. [program:food_crm]
  2. directory=/run/media/duxin/G/eartip/code_test/FoodCrm
  3. command=/home/duxin/.local/share/virtualenvs/FoodCrm-28Lm7e7d/bin/python manage.py runserver 0:99%(process_num)02d
  4. process_name=%(program_name)s_%(process_num)02d
  5. numprocs=4
  6. autorestart=true
  7. autostart=true
  8. stopasgroup=true
  9. killasgroup=true
  10. redirect_stderr=true
  11. user=duxin
  12. stdout_logfile_maxbytes=50MB
  13. stdout_logfile_backups=5
  14. stdout_capture_maxbytes=1MB
  15. stdout_events_enabled=false
  16. loglevel=warn

可以看到多了process_name、numprocs两个参数
stopasgroup、killasgroup 保证启停的时候把带着子进程一起起停

添加 web 支持

在/etc/supervisord.conf配置文件中将下面几行前面的分号去掉,修改一下数据保存退出(用户名与密码自己定义)

  1. [inet_http_server] # inet (TCP) server disabled by default
  2. port=0.0.0.0:9001 # ip_address:port specifier, *:port for all iface
  3. username=user # default is no username (open server)
  4. password=123 # default is no password (open server)

重启
systemctl trstart supervisord
效果
http://localhost:9001/
super.png

supervisorctl命令

输入命令 supervisorctl 进入 supervisorctl 的 shell 交互界面
help # 查看帮助

  1. default commands (type help <topic>):
  2. =====================================
  3. add exit open reload restart start tail
  4. avail fg pid remove shutdown status update
  5. clear maintail quit reread signal stop version

status # 查看程序状态

  1. fastapi_demo:fastapi_demo_00 RUNNING pid 227285, uptime 23:24:55
  2. fastapi_demo:fastapi_demo_01 RUNNING pid 227286, uptime 23:24:55
  3. fastapi_demo:fastapi_demo_02 RUNNING pid 227287, uptime 23:24:55
  4. fastapi_demo:fastapi_demo_03 RUNNING pid 227288, uptime 23:24:55
  5. father RUNNING pid 227289, uptime 23:24:55
  6. food_crm:food_crm_00 RUNNING pid 227290, uptime 23:24:55
  7. food_crm:food_crm_01 RUNNING pid 227291, uptime 23:24:55
  8. food_crm:food_crm_02 RUNNING pid 227292, uptime 23:24:55
  9. food_crm:food_crm_03 RUNNING pid 227293, uptime 23:24:55
  1. stop program_name # 关闭 指定的程序<br /> start program_name # 启动 指定的程序<br /> restart program_name # 重启 指定的程序<br /> tail -f program_name # 查看 该程序的日志<br /> update # 重启配置文件修改过的程序(修改了配置,通过这个命令加载新的配置)<br /> reload //重新启动配置中的所有程序<br /> restart fastapi_demo:* 可以重启 fastapi_demo 组的所有进程

也可以不进入supervisorctl的shell,直接在终端执行命令操作:
supervisorctl status
supervisorctl update