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文件