使用 Supervisor 管理进程

Supervisor 是 Linux 系统上进程管理的工具,它可以帮我们监控创建的进程的运行状态。Supervisor 由两部分组成,supervisord 和 supervisorctl 。supervisord 是服务端部分,它会根据配置文件,启动与管理进程。supervisorctl 是客户端工具,它包含一些命令控制 supervisord 。

安装 Supervisor

ubuntu 上安装

1
sudo apt-get install supervisor

不同的 linux 上 Supervisor 的配置文件可能不一样。 ubuntu 上安装的 Supervisor 位于 /etc/supersor/supervisord.conf ,自己创建的进程配置文件放在 /etc/supervisor/conf.d/ 目录下,配置文件以 .conf 后缀。centos 上安装的 Supervisor 位于 /etc/supervisord.conf ,自己创建的进程配置文件放在 /etc/supervisord.d 目录下 ,配置文件以 .ini 后缀。

Supervisor 配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
; supervisor config file

[unix_http_server]
file=/var/run/supervisor.sock ; (the path to the socket file)
chmod=0700 ; sockef file mode (default 0700)

[supervisord]
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
childlogdir=/var/log/supervisor ; ('AUTO' child log dir, default $TEMP)

; the below section must remain in the config file for RPC
; (supervisorctl/web interface) to work, additional interfaces may be
; added by defining them in separate rpcinterface: sections
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL for a unix socket

; The [include] section can just contain the "files" setting. This
; setting can list multiple files (separated by whitespace or
; newlines). It can also contain wildcards. The filenames are
; interpreted as relative to this file. Included files *cannot*
; include files themselves.

[include]
files = /etc/supervisor/conf.d/*.conf

创建自己的进程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[program:toolapi]
# 进程执行命令 ,通过 bash -c 执行 shell 命令
command=bash -c "source /usr/bin/activate py3108 && cd /home/tool-api && uvicorn tool-api:app --host 0.0.0.0 --port 80 --reload"
# 自动启动
autostart=true
# 自动重启
autorestart=true
# 执行用户
user=sd
# 进程数
numprocs=1
# 将标准错误重定向到标准输出日志文件
redirect_stderr=true
# 错误日志文件
stderr_logfile=/home/log/supervisor/toolapi_err.log
# 输出日志文件
stdout_logfile=/home/log/supervisor/toolapi.log
# 进程停止时,其子进程也停止
stopasgroup=true
# 进程杀死时,其子进程也杀死
killasgroup=true

Supervisor 常用命令

  • sudo supervisorctl reload : 重新加载配置

  • sudo supervisorctl update : 使用新的配置启动新的或已更改的进程

  • sudo supervisorctl start program_name:启动名为 program_name 的进程。

  • sudo supervisorctl stop program_name:停止名为 program_name 的进程。

  • sudo supervisorctl restart program_name:重启名为 program_name 的进程。

  • sudo supervisorctl status:查看所有进程的状态。

  • sudo supervisorctl status program_name:查看名为 program_name 的进程的状态。

Supervisor 启动

  • sudo systemctl start supervisorsudo supervisord