20191115 作者:陈文小超
准备工作
- 安装依赖
# 安装Supervisor
yum install python-setuptools
easy_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
参考文献
来源:CSDN
作者:陈文小超
链接:https://blog.csdn.net/qq_38721452/article/details/103497488