supervisor是管理进程的一大杀器,就算应用出现异常停止掉了,也会帮忙自动重启,下面我们就介绍一下安装以及简单使用。
安装
yum install python-setuptools
easy_install supervisor
配置
- 创建文件夹及配置文件
mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf
- 修改supervisord.conf的内容
在文件结尾[include]节点处把;files = relative/directory/*.ini改为
files = /etc/supervisor/conf.d/*.conf
在/etc/supervisor/下创建conf.d文件夹,及ProjectName.conf(以项目名称命名的)
编辑项目配置文件
[program: ProjectName]
command=dotnet ProjectName.dll ; 运行程序的命令
directory=/root/Publishing/PublishOutput/ ; 命令执行的目录
autorestart=true ; 程序意外退出是否自动重启
autostart=true ; 是否自动启动
stderr_logfile=/var/log/ProjectName.err.log ; 错误日志文件
stdout_logfile=/var/log/ProjectName.out.log ; 输出日志文件
environment=ASPNETCORE_ENVIRONMENT=Production ; 进程环境变量
user=root ; 进程执行的用户身份
stopsignal=INT
startsecs=1 ; 自动重启间隔
启动supervisor,并检查进程
supervisord -c /etc/supervisor/supervisord.conf
ps -ef | grep supervisor
常用命令
sudo service supervisor stop 停止supervisor服务
sudo service supervisor start 启动supervisor服务
supervisorctl shutdown #关闭所有任务
supervisorctl stop|start program_name #启动或停止服务
supervisorctl status #查看所有任务状态
supervisorctl reload #修改配置文件后,重新加载生效
配置开机自启动
- 在/usr/lib/systemd/system目录中添加supervisord.service
[Unit]
Description=Supervisor daemon
[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
- 启动服务
systemctl enable supervisord
- 检查
systemctl is-enabled supervisord
常见问题
- 解决unix:///tmp/supervisor.sock no such file的问题
1、打开配置文件
vim /etc/supervisor/supervisord.conf
这里把所有的/tmp路径改掉,/tmp/supervisor.sock 改成 /var/run/supervisor.sock,/tmp/supervisord.log 改成 /var/log/supervisor.log,/tmp/supervisord.pid 改成 /var/run/supervisor.pid 要不容易被linux自动清掉
2、修改权限
sudo chmod 777 /run
sudo chmod 777 /var/log
如果没改,启动报错 IOError: [Errno 13] Permission denied: /var/log/supervisord.log'
3、创建supervisor.sock
sudo touch /var/run/supervisor.sock
sudo chmod 777 /var/run/supervisor.sock
4、启动supervisord,注意stop之前的实例或杀死进程
supervisord
5、启动报错
Unlinking stale socket /var/run/supervisor.sock
解决
unlink /var/run/supervisor.sock
6、非ROOT账号运行
···
把supervisord.conf中改成chmod=0766
然后重启supervisord
···
yum 安装
- yum install -y supervisor
- systemctl enable supervisord.service
- systemctl start supervisord.service