之前部署用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