一、简介
Supervisor是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,Supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。
二、 安装
sudo pip install supervisor
supervisor安装完成后会生成三个执行程序:supervisord
、supervisorctl
、echo_supervisord_conf
,分别是supervisor的守护进程服务(用于接收进程管理命令)、客户端(用于和守护进程通信,发送管理进程的指令)、生成初始配置文件程序。
配置文件说明
supervisor配置文件:/etc/supervisor/supervisord.conf
子进程配置文件路径:/etc/supervisor/conf.d/
三、生成初始化配置文件
cd /etc
sudo mkdir supervisor
sudo touch /etc/supervisor/supervisord.conf
sudo chmod 777 /etc/supervisor/supervisord.conf
sudo echo_supervisord_conf > /etc/supervisor/supervisord.conf
四、编辑配置文件
sudo vim /etc/supervisor/supervisord.conf
在底部添加
[include]
files = /etc/supervisor/conf.d/*.conf
可选内容
将file=/tmp/supervisor.sock 修改为 file=/var/run/supervisor.sock
将logfile=/tmp/supervisord.log 修改为 logfile=/var/log/supervisor/supervisord.log
将pidfile 修改为 pidfile=/var/run/supervisord.pid
将serverurl=unix:///tmp/supervisor.sock 修改为 serverurl=unix:///var/run/supervisor.sock
五、 编辑程序运行配置文件
cd /etc/supervisor
sudo mkdir conf.d
sudo vim /etc/supervisor/conf.d/app.conf
在底部添加
[program:frp]
command = /home/jetson/frp/frpc -c /home/jetson/frp/frpc.ini
autostart = true
startsecs = 5
startretries = 63072000
user = root
redirect_stderr = true
stdout_logfile = /home/jetson/log/frp.log
stdout_logfile_maxbytes = 20MB
stdout_logfile_backups = 5
stdout_events_enable =true
stderr_logfile = /home/jetson/log/frp.log
stderr_logfile_maxbytes = 20MB
stderr_logfile_backups = 5
六、supervisor脚本文件
cd /etc/supervisor
sudo vim start_supervisor.sh
sudo supervisord -c /etc/supervisor/supervisord.conf #启动 supervisord, 通过 -c 选项指定配置文件路径
sudo vim refresh_supervisor_conf.sh
sudo supervisorctl update #配置文件修改后使用该命令加载新的配置
sudo supervisorctl reload #重新启动配置中的所有程序
sudo chmod +x *.sh
七、开机启动设置
sudo vim /etc/crontab #设置开机自启动
添加
@reboot root sh /etc/supervisor/start_supervisor.sh
开始运行
```bash
sh /etc/supervisor/start_supervisor.sh
sudo supervisorctl restart all
常用命令
supervisorctl status
supervisorctl stop frp
supervisorctl start frp
supervisorctl restart
supervisorctl update
supervisorctl reload