supervisor 多进程守护的使用和配置


supervisor 多进程守护的使用和配置

pip安装

$ pip install supervisor

apt 安装

$ sudo apt-get install supervisor
$ whereis supervisor

创建参考配置文件

sudo echo_supervisord_conf > default.conf  # 指定到当前目录

supervisord 使用自己的配置文件

git clone https://gitee.com/theing/supervisor_conf.git
sudo supervisord -c supervisor.conf
# 生效的主要是配置文件里面的这一段,可以根据自己的需求进行更改。
[supervisord]
logfile=/home/ubuntu/workspace/supervisor/supervisord.log ; main log file; default $CWD/supervisord.log
logfile_maxbytes=50MB        ; max main logfile bytes b4 rotation; default 50MB
logfile_backups=10           ; # of main logfile backups; 0 means none, default 10
loglevel=info                ; log level; default info; others: debug,warn,trace
pidfile=/home/ubuntu/workspace/supervisor/supervisord.pid ; supervisord pidfile; default supervisord.pid

重新加载 supervisorctl 配置文件

sudo supervisorctl reload
sudo supervisorctl restart all

supervisorctl主要命令

命令 说明
supervisorctl start program_name 启动某个进程
supervisorctl stop program_name 停止某个进程
supervisorctl restart program_name 重启某个进程
supervisorctl status program_name 查看某个进程的状态
supervisorctl stop all 停止全部进程
supervisorctl reload 载入最新的配置文件,重启所有进程
supervisorctl update 根据最新的配置,重启配置更改过的进程,未更新的进程不受影响
supervisorctl stop all 停止所有进程
supervisorctl start all 启动所有进程
# 生效的主要是着两段
[supervisorctl]
serverurl=unix:///home/ubuntu/workspace/supervisor/supervisor.sock ; use a unix:// URL  for a unix socket

[program:zcj_tornado]
;command=python main.py --port=80%(process_num)02d    ; the program (relative uses PATH, can take args)
command=bash -c "source /home/ubuntu/miniconda3/bin/activate && conda activate tornado && python /home/ubuntu/workspace/tornado/main.py" --port=80%(process_num)02d    ; the program (relative uses PATH, can take args)
process_name=%(program_name)s-80%(process_num)02d ; process_name expr (default %(program_name)s)
numprocs=2                    ; number of processes copies to start (def 1)
directory=/home/ubuntu/workspace/cop_main/                ; directory to cwd to before exec (def no cwd)
autostart=false                ; supervisord守护程序启动时自动启动子进程
autorestart=false              ; supervisord守护程序重启时自动重启子进程
user=ubuntu                 ; setuid to this UNIX account to run the program
redirect_stderr=true          ; redirect proc stderr to stdout (default false)
stdout_logfile=/home/ubuntu/workspace/supervisor/runtime-output/%(program_name)s-80%(process_num)02d.log        ; stdout log path, NONE for none; default AUTO
stdout_logfile_maxbytes=100MB   ; max # logfile bytes b4 rotation (default 50MB)
stdout_logfile_backups=9     ; # of stdout logfile backups (0 means none, default 10)

supervisor管理进程的多个实例

在原来配置的基础之上,再加入进程数目以及相应进程的名字,如下

process_name=%(program_name)s_%(process_num)02d
numprocs=2

所以文件整个显示如下:

/etc/supervisor/conf.d # cat far.conf 

[program:far]
process_name=%(program_name)s_%(process_num)02d  # 主要增加这两条就可以了
numprocs=2
command= 
directory=/home/xugaoxiang/www
autostart=true
autorestart=true
user=root
redirect_stderr=true

supervisor的web化

首先需要编辑/etc/supervisor/supervisor.conf, 添加语句

[inet_http_server]
port=127.0.0.1:9001
;username=theing
;password=theing

启动程序通过ip进行访问进程状态

问题:

PermissionError: [Errno 13] Permission denied: '/home/ubuntu/workspace/supervisor/supervisord.log'

添加sudo

Error: Another program is already listening on a port that one of our HTTP servers is configured to use.  Shut this program down first before starting supervisord.

删除supervisor.sock文件


文章作者: theing
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 theing !
评论
  目录