之前部署用nohup xxx &,会有以下几个问题:

  • 机器重启进程没了
  • 程序崩了不会自动拉起
  • 启停靠 ps + kill,容易杀错
  • 日志不好管

Supervisor 能做到开机自启、挂了重启、统一启停、日志轮转。

supervisord:守护进程
supervisorctl:命令行,日常用它控制

安装

# Ubuntu / Debian
apt install supervisor -y

systemctl enable --now supervisor

配置目录:/etc/supervisor/conf.d/

使用

一个程序一个 conf,例如 /etc/supervisor/conf.d/app.conf

[program:app]
command=/opt/app/main
directory=/opt/app
user=root
autostart=true
autorestart=true
startsecs=5
startretries=3
stdout_logfile=/var/log/app.out.log
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=5
stderr_logfile=/var/log/app.err.log

加载配置:

supervisorctl reread
supervisorctl update
supervisorctl status

command 写绝对路径,不要写 cd xxx && ./main 这种 shell 语法。改完要restart重启。

常用命令

supervisorctl status              # 查看状态
supervisorctl start app           # 启动
supervisorctl stop app            # 停止
supervisorctl restart app         # 重启
supervisorctl start/stop/restart all

supervisorctl reread              # 读配置,看哪些变了
supervisorctl update              # 让配置生效(新增/修改用这个)
supervisorctl reload              # 重启 supervisord 本身,所有进程都会走一遍

supervisorctl tail app            # 看 stdout
supervisorctl tail app stderr     # 看 stderr
supervisorctl tail -f app         # 跟踪日志

改业务配置:reread + update
重启某个程序:restart app
慎用 reload