使用supervisor管理用户级应用

特性维度 systemd (系统服务管理器) Supervisor (专用进程管理工具)
核心机制 集成于系统,通过服务单元(.service)文件配置重启策略 作为独立的监控进程,将其管理的应用作为子进程启动和监控
主要优势 系统级集成,性能开销小,可统一管理依赖关系、资源限制等 配置简单,提供专用命令行(supervisorctl)和Web界面进行管理
适用场景 管理系统的核心服务或需要随系统启动的常驻服务 管理用户空间的应用(如Web服务器、队列处理器)

配置在 /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
22
23
24
25
26
[group:mygroup]
programs=
myapp1,
myapp2

[program:myapp1]
command=/home/mzdai/workspace/myapp1 param1 param2
directory=/home/mzdai/workspace/ # 启动目录
user=mzdai # 启动用户
autostart=true # 开机自动启动
autorestart=true # 任何情况停止都会自动重启
stdout_logfile=/var/log/supervisor/GTNotifListener-92808451.log
stderr_logfile=/var/log/supervisor/GTNotifListener-92808451.log
environment=
LD_LIBRARY_PATH="/home/mzdai/workspace/lib" # 环境变量

[program:myapp2] # 上面很多参数是不必要的
command=/home/mzdai/workspace/myapp2 param1 param2
autostart=false # 开机不自启
autorestart=unexpected # 只在异常退出时自动重启

[program:myapp3] # 上面很多参数是不必要的
command=/home/mzdai/workspace/myapp3 param1 param2
autostart=false
autorestart=false

更新配置后需要通过下面命令生效

1
2
supervisorctl reread
supervisorctl update

查看状态

1
supervisorctl status

启动一个不属于组的program

1
supervisorctl start myapp3

启动一个隶属于组的program

1
supervisorctl start mygroup:myapp1

启动一组program

1
supervisorctl start mygroup:*

停止一组program

1
supervisorctl stop mygroup:*