supervisor是一个unix的系统进程管理工具,可以用来做程序的守护进程,具体参考官网
1、 安装
yum install supervisor
supervisor安装完成后会生成三个执行程序:
- supervisortd
- supervisorctl
- echo_supervisord_conf
2、生成配置文件
sudo echo_supervisord_conf > /etc/supervisord.conf
3、创建一个监听的配置文件
1、创建目录
mkdir -p /etc/supervisord/confs/
2、在目录中创建文件,文件名为demo.conf
;demo表示程序名称
[program:demo]
;需要执行的命令
command=php demo.php
;命令执行的目录
directory=/data/wwwroot
;环境变量,这里可以不加,因为我的php已经加入到环境变量中了
;environment=PATH="/data/nmp/php/bin/"
;哪个用户运行
user=root
;是否自启动
autostart=true
;是否自动重启
autorestart=true
;自动重启时间间隔,单位秒
startsecs=3
;错误日志文件
stderr_logfile=/tmp/demo.err.log
;输出日志文件
stdout_logfile=/tmp/demo.out.log
3、在supervisor.conf中引入配置文件夹下的.conf文件
#在文件最后面加上下面的内容并保存
[root@* etc]# vi supervisord.conf
[include]
files = /etc/supervisord/confs/*.conf
4、创建一个程序脚本文件,就是你要被监听的文件,这里的文件名必须跟上一步配置文件中的command 命令的文件名保持一致,目录也必须对应上,所以我这里是/data/wwwroot/demo.php
<?php
$i = 0;
while(true) {
$i++;
echo $i, PHP_EOL;
sleep(1);
}
5、启动supervisor
#启动
superviosrd -c /etc/supervisord.conf
#停止
supervisorctl shutdown
#重新加载配置文件
supervisorctl reload
6、查看supervisor运行状态
supervisorctl status
7、查看帮助
supervisorctl help
错误处理
[root@* confs]# supervisorctl start
unix:///var/run/supervisor.sock no such file
# 这是因为缺少文件,添加文件即可
[root@* confs]# touch /var/run/supervisor.sock
[root@* confs]# supervisord -c /etc/supervisord.conf
Unlinking stale socket /var/run/supervisor.sock
#这是需要我们断开之前的链接
8、设置开机启动
在目录/usr/lib/systemd/system/ 新建文件supervisord.service,并添加配置内容
[Unit]
Description=Process Monitoring and Control Daemon
After=rc-local.service nss-user-lookup.target
[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /usr/supervisor/supervisord.conf ;开机启动时执行
ExecStop=/usr/bin/supervisord shutdown
ExecReload=/usr/bin/supervisord reload
killMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
8.1 启动服务
systemctl enable supervisord
8.2 验证一下是否为开机启动
systemctl is-enabled supervisord