Supervisord

最后更新: 2021-04-12 21:19:10 +0800 +0800
原文以英文撰写。您正在阅读AI翻译版本。

Supervisor 是面向类 Unix 主机的进程控制系统。它会启动已配置的程序,捕获程序输出, 在适当时重启程序,并提供控制接口。当应用需要轻量且明确的进程管理器时,Supervisor 很有用;但它不能替代操作系统的 init 系统或服务管理器。

定义程序 #

最小的程序定义应放在 Supervisor 的包含配置目录中:

ini
[program:worker]
command=/opt/app/bin/worker --queue=default
directory=/opt/app
user=app
autostart=true
autorestart=unexpected
startsecs=5
stopasgroup=true
killasgroup=true
stdout_logfile=/var/log/app/worker.log
stderr_logfile=/var/log/app/worker-error.log

startsecs 会阻止将立即退出的进程报告为已成功启动。stopasgroup 和 killasgroup 有助于确保重启期间子进程收到终止信号。以非特权用户运行服务,并且只 授予它所需的文件系统访问权限。

应用并检查配置 #

修改配置后,应有意识地重新加载配置:

sh
supervisorctl reread
supervisorctl update
supervisorctl status
supervisorctl tail -f worker stderr

reread 会发现配置变更;update 会添加、移除或重启受影响的程序。使用 supervisorctl restart worker 执行有意的重启,并在增加重试次数前检查日志。

容器和服务管理器 #

在单进程容器中,直接以 PID 1 运行应用,并让编排器处理重启。仅为了运行一个进程而 加入 Supervisor 会使信号和退出状态变得不透明。在传统主机上,如果 systemd 等平台 服务管理器的依赖处理、cgroup 集成和日志功能满足要求,应优先使用平台服务管理器。 当 Supervisor 简单的程序模型正好适合作为运维边界时,再使用 Supervisor。

评论

在 GitHub 上阅读或评论(发表评论需要登录)