Python进程管理工具 Supervisor 使用教程

Python进程管理工具 Supervisor 使用教程

目录

安装

sudo pip install supervisor
# 创建配置文件 先跳转到home目录下创建自定义`my.conf`
cd 
echo_supervisord_conf > ./my.conf

默认的配置文件是下面这样的,但是这里有个坑需要注意,supervisord.pid 以及 supervisor.sock 是放在 /tmp 目录 下,但是 /tmp 目录是存放临时文件,里面的文件是会被 Linux 系统删除的,一旦这些文件丢失,就无法再通过 supervisorctl 来执行 restart 和 stop 命令了,将只会得到 unix:///tmp/supervisor.sock 不存在的错误 。
因此可以单独建一个文件夹,来存放这些文件,比如放在 /home/supervisor/

在home路径下自己的目录下创建文件夹

例如:
mkdir /home/user/supervisor
mkdir /home/user/log

然后对my.conf默认的一些配置进行修改

1.[unix_http_server]
2.;file=/tmp/supervisor.sock   ; (the path to the socket file)
;修改为 /home/user/supervisor 目录,上面自己创建的目录,避免被系统删除
3.file=/home/user/supervisor/supervisor.sock   ; (the path to the socket file)

; 把4/5/6/7行前面的注释符`;`去掉,这样就可以开启web页面来管理supervisor
4.[inet_http_server]         ; inet (TCP) server disabled by default
5.port=127.0.0.1:9001        ; (ip_address:port specifier, *:port for ;all iface)
6.username=user              ; (default is no username (open server))
7.password=123               ; (default is no password (open server))
....
8.[supervisord]
9.;logfile=/tmp/supervisord.log ; (main log file;default $CWD/supervisord.log)
;修改为 /home/user/log 目录,上面自己创建的目录,避免被系统删除
10.logfile=/home/user/log/supervisord.log ; (main log file;default $CWD/supervisord.log)
; 日志文件多大时进行分割
11.logfile_maxbytes=50MB        ; (max main logfile bytes b4 rotation;default 50MB)
; 最多保留多少份日志文件 
12.logfile_backups=10           ; (num of main logfile rotation backups;default 10)
13.loglevel=info                ; (log level;default info; others: debug,warn,trace)
14.;pidfile=/tmp/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
;修改为 /home/user/supervisor 目录,自定义目录,避免被系统删除
15.pidfile=/home/user/supervisor/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
...
16.[supervisorctl]
; 必须和'unix_http_server'里面的设定匹配
17.;serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL  for a unix socket
;修改为 /home/user/supervisor 目录,自定义目录避免被系统删除
18.serverurl=unix:///home/user/supervisor/supervisor.sock ; use a unix:// URL  for a unix socket
; 要开启web页面来管理supervisor必须把19/20/21行前面的注释符`;`去掉 而且username要与上面的[inet_http_server]设置一直
19.serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket
20.username=user           ; should be same as http_username if set
21.password=123            ; should be same as http_password if set
...

进程的配置样例

; 设置进程的名称,使用 supervisorctl 来管理进程时需要使用该进程名 app(自定义名称)
[program:app] 
command=python app.py 
; command=python /home/user/app.py 这是指定路径版
;numprocs=1                 ; 默认为1
;process_name=%(program_name)s   ; 默认为 %(program_name)s,即 [program:x] 中的 x
directory=/home/user ; 执行 command 之前,先切换到工作目录
; 程序崩溃时自动重启,重启次数是有限制的,默认为3次
autorestart=true            
redirect_stderr=true        ; 重定向输出的日志
stdout_logfile = /home/log/app.log  ; 必须先创建这个日志文件再指定
loglevel=info  ; 日志等级

启动 supervisord

# 执行 supervisord 命令,将会启动 supervisord 进程,同时我们在配置文件中设置的进程也会相应启动。
# 使用自定义的配置文件 /home/user/my.conf
supervisord -c /etc/supervisord.conf
# 上面命令成功以后,输入 supervisorclt 会提示输入用户名和密码输入默认的即可

supervisorctl 命令介绍

# 查看进程运行状态
supervisorctl status
# 停止某一个进程,program_name 为 [program:x] 里的 x即自定义的名称
supervisorctl stop program_name
# 启动某个进程
supervisorctl start program_name
# 重启某个进程
supervisorctl restart program_name
# 结束所有属于名为 groupworker 这个分组的进程 (start,restart 同理)
supervisorctl stop groupworker:
# 结束 groupworker:name1 这个进程 (start,restart 同理)
supervisorctl stop groupworker:name1
# 停止全部进程,注:start、restart、stop 都不会载入最新的配置文件
supervisorctl stop all
# 载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程
supervisorctl reload
# 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启
supervisorctl update

停止supervisord服务

# 可以查看进程 然后kill进程
# kill进程以后记得输入`sudo unlink /home/user/supervisor/supervisor.sock`这个命令 然后再重新启动

资料链接

[ supervisor 更多资料 ]

猜你喜欢

转载自blog.csdn.net/weixin_42174361/article/details/80340626