20191115 作者:陈文小超
准备工作
- 安装依赖
# 安装Supervisor
yum install python-setuptoolseasy_install supervisor
- 生成配置文件
mkdir /etc/supervisor
mkdir /etc/supervisor/supervisord.conf.d
echo_supervisord_conf > /etc/supervisor/supervisord.conf
- 修改配置文件
vim /etc/supervisor/supervisord.conf# include区段修改为(最后一行,注意include前面的分好也要放开)
[include]
files = /etc/supervisor/supervisord.conf.d/*.conf
- 编写进程文件
# 在/etc/supervisor/supervisord.conf.d创建
vi /etc/supervisor/supervisord.conf.d/laravel-worker# 添加内容
[program:laravel-worker] # 和文件名保持一致
process_name=%(program_name)s_%(process_num)02d
command=/usr/local/php/bin/php /home/app/wisdom-tree/artisan queue:work --tries=3
autostart=true
autorestart=true
user=root
numprocs=1
redirect_stderr=true
stdout_logfile=/home/app/wisdom-tree/storage/logs/redis-queue.log
- 添加系统服务
# 创建文件
vi /etc/init.d/supervisord# 添加如下内容#!/bin/sh
#
# /etc/rc.d/init.d/supervisord
#
# Supervisor is a client/server system that
# allows its users to monitor and control a
# number of processes on UNIX-like operating
# systems.
#
# chkconfig: - 64 36
# description: Supervisor Server
# processname: supervisord # Source init functions
. /etc/init.d/functions RETVAL=0
prog="supervisord"
pidfile="/tmp/supervisord.pid"
lockfile="/var/lock/subsys/supervisord" start()
{ echo -n $"Starting $prog: " daemon --pidfile $pidfile supervisord -c /etc/supervisor/supervisord.conf # 切记记得更改RETVAL=$? echo [ $RETVAL -eq 0 ] && touch ${lockfile}
} stop()
{ echo -n $"Shutting down $prog: " killproc -p ${pidfile} /usr/bin/supervisord RETVAL=$? echo if [ $RETVAL -eq 0 ] ; then rm -f ${lockfile} ${pidfile} fi
} case "$1" in start) start ;; stop) stop ;; status) status $prog ;; restart) stop start ;; *) echo "Usage: $0 {start|stop|restart|status}" ;; esac
- 配置并开启
chmod +x /etc/init.d/supervisord
chkconfig supervisord on
service supervisord start
- supervisord管理
# Supervisord安装完成后有两个可用的命令行supervisor和supervisorctl,命令使用解释如下:supervisord,# 初始启动Supervisord,启动、管理配置中设置的进程。
supervisorctl stop programxxx,# 停止某一个进程(programxxx),programxxx为[program:chatdemon]里配置的值,这个示例就是chatdemon。
supervisorctl start programxxx,# 启动某个进程
supervisorctl restart programxxx,# 重启某个进程
supervisorctl stop groupworker: ,# 重启所有属于名为groupworker这个分组的进程(start,restart同理)
supervisorctl stop all,# 停止全部进程,注:start、restart、stop都不会载入最新的配置文件。
supervisorctl reload,# 载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程。
supervisorctl update,# 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。
# 注意:显示用stop停止掉的进程,用reload或者update都不会自动重启。
- 查看Supervisor任务执行状态
supervisorctl status
- 配置文件(laravel-worker配置文件)改动时需要执行
supervisorctl reread
supervisorctl update # 注意和supervisorctl reload的区别
supervisorctl start laravel-worker:*
问题总结
laravel-worker: ERROR (no such group)
- supervisord.conf的include前面的分好没有删除一定不要少了后缀名.conf
- include下面的files路劲引入不正确
- /etc/supervisor/supervisord.conf.d下面的配置文件不正确:文件名和进程名不一致,文件名少写.conf后缀
laravel-worker can’t find command ‘php’
-
查看 php 的运行目录 which php
-
/etc/supervisor/supervisord.conf.d配置文件的 command 的 php 加上绝对路径
command=/usr/local/php/bin/php /home/app/wisdom-tree/artisan queue:work --tries=3
参考文献
- Bamboosupervisor安装部署和使用实例
- Linux配置Supervisor 配置遇到的坑
- centos/ubuntu/Mac中使用Supervisor监控管理laravel queue队列进程
- no such group
- 如何使用Supervisor管理Laravel 队列进程?
- 为laravel队列安装supervisor并配置
- Supervisor 解决 can’t find command php*