Supervisor 是一个 Linux 下的进程管理器,它会在 queue:work 进程关闭后自动重启。 可代替crontab定时脚本
参考: [supervisor 安装配置使用] https://learnku.com/laravel/t/2126/supervisor-installation-configuration-use
[supervisor 从安装到使用] https://www.jianshu.com/p/3658c963d28b
[laravel官文] https://learnku.com/docs/laravel/5.6/queues/1395#e45763
1.安装[centOS]
yum install supervisor
2.修改配置文件 /etc/supervisord.conf 最后一行 ini改为conf
vim /etc/supervisord.conf
files=/etc/supervisor.d/*.conf
3./etc/supervisord.d目录下新增配置文件
vim jlt-worker.conf
[program:jlt-worker] ;*[program:应用名称]
process_name=%(program_name)s_%(process_num)02d ;
当numprocs为1时,process_name=%(program_name)s;
当numprocs>=2时,%(program_name)s_%(process_num)02d
command=php /data/httpd/jlt-staging/artisan queue:work --sleep=3 --tries=3 ;*命令路径
autostart=true ;如果是true,当supervisor启动时,程序将会自动启动
autorestart=true ;*自动重启
;user=user ;user 报错,暂时注释掉 应该是/etc/supervisord.conf需要配置账号密码 我没有设置
numprocs=8 ;进程数量
redirect_stderr=true ;是否重定向
stdout_logfile=/data/httpd/jlt-staging/storage/logs/worker.log ;日志文件位置
4.启动+重启 /etc目录下执行 无报错即运行成功
supervisord -c /etc/supervisord.conf // 启动??
ps aux | grep supervisord // 查看 supervisord是否运行
ps -ef | grep supervisord // 查看是否启动
sudo supervisorctl reload
sudo supervisorctl update
sudo supervisorctl start jlt-worker:*
测试
1、写一个php文件
<?php
while(1) {
echo date('Y-m-d H:i:s');
echo "\n";
sleep(1);
}
2、设置supervisor
vim /etc/supervisord.d/1.conf
command=/usr/local/php7/bin/php test.php
stdout_logfile=/home/xxx/data/log/11.log
redirect_stderr = true
autostart = true
autorestart = true
3、启动 supervisord
systemctl start supervisord 启动
systemctl restart supervisord 重启
systemctl stop supervisord 停止
4、查看/home/xxx/data/log/11.log,不停的在输出
5、分析
ps aux|grep test.php // 查看php脚本进程
root 20537 0.0 2.1 102048 17764 ? S 17:03 0:00 /usr/local/php7/bin/php test.php
root 20541 0.0 0.1 12108 972 pts/6 R+ 17:03 0:00 grep --color=auto test.php
kill -9 20537
ps aux|grep test.php
root 20543 0.0 2.1 102048 17792 ? S 17:04 0:00 /usr/local/php7/bin/php test.php
root 20545 0.0 0.1 12108 1068 pts/6 R+ 17:04 0:00 grep --color=auto test.php
kill -9 进程号 // 停止失败
systemctl stop supervisord // 停止成功
systemctl start supervisord // 启动成功
6、phpresque的守护进程用其监控
(QUEUE=jobs3 REDIS_BACKEND=127.0.0.1:6380 php /xxx/test.php >> /tmp/1.log 2>&1 &)
添加/etc/supervisord.d/2.conf
vim /etc/supervisord.d/2.conf
[program:a2]
directory=/home/xxx/data/www
command=QUEUE=jobs3 REDIS_BACKEND=127.0.0.1:6380 /usr/local/php7/bin/php /home/xxx/data/www/test2.php
stdout_logfile=/home/xxx/data/log/a2.log
redirect_stderr=true
autostart=true
autorestart=true
systemctl restart supervisord // 重启supervisord
cat /home/xxx/data/log/a2.log // 失败,原因:command后面的命令不认识环境变量设置参数,通过绕个弯子执行脚本即可
vim s1.sh
#!/bin/bash
QUEUE=jobs3 REDIS_BACKEND=127.0.0.1:6380 /usr/local/php7/bin/php /home/xxx/data/www/test2.php
vim /etc/supervisord.d/2.conf
[program:a2]
directory=/home/xxx/data/www
command=/home/xxx/data/www/s1.sh
stdout_logfile=/home/xxx/data/log/a2.log
redirect_stderr=true
autostart=true
autorestart=true
systemctl restart supervisord
cat /home/xxx/data/log/a2.log // 成功
可参考:http://www.jb51.net/LINUXjishu/400050.html