supervisor是一款python开发的软件,可以很方便的守护PHP脚本运行,在Laravel中,可以使用它来守护任务队列进程,并且支援多线程及输出日志。

1、安装

 yum install python-setuptools
 easy_install supervisor

2、创建配置文件及调整配置
运行下列命令即可生成一个配置文件在/etc/supervisord.conf

  echo_supervisord_conf > /etc/supervisord.conf

接着需要打开这个配置文件,修改一些配置,防止在使用过程中出现一些诡异情况

首先打开配置文件:

  vim /etc/supervisord.conf

将下列配置节进行修改:

[unix_http_server]
file=/tmp/supervisor.sock;
...
[supervisord]
logfile=/tmp/supervisord.log;
pidfile=/tmp/supervisord.pid;
...
;[include]
;files = relative/directory/*.ini

修改之后:

[unix_http_server]
# 替换/tmp 为/var/run
file=/var/run/supervisor.sock;
...
[supervisord]
# 日志文件修改为 /var/log
logfile=/tmp/supervisord.log;
# pid文件修改为 /var/run
pidfile=/var/run/supervisord.pid;
...
# 去掉include节点的注释
[include]
# 配置文件目录 修改为 /etc/supervisor/*.conf
files = /etc/supervisor/*.conf

然后运行下列命令加载这个配置文件:

supervisord -c /etc/supervisord.conf

3、创建项目配置文件

因上面配置项目配置文件的路径为/etc/supervisor/*.conf,则将配置文件以laravel-{项目名}.conf的格式存放于/etc/supervisor/目录下,例如/etc/supervisor/laravel-toggle.conf

打开这个配置文件,参考配置如下(根据个人需要进行修改):

[program:laravel-toggle] # 这里为项目名,前缀-后缀
process_name=%(program_name)s_%(process_num)02d
command=php /home/wwwroot/www.toggle.co.kr/artisan queue:work # 这里填写你的项目artisan所在路径
autostart=true # 是否自动开始
autorestart=true # 是否自动重启(防止进程意外退出)
user=root # 使用的用户
numprocs=8 # 使用的进程数量
redirect_stderr=true # 为true的话,stderr的log会并入stdout的log里面
stdout_logfile=/home/logs/worker/toggle.co.kr.log # 日志存放路径(若无记得提前创建目录)

4、运行项目
使用下列命令即可运行项目

sudo supervisorctl reread # 重载supervisor配置
sudo supervisorctl update # 更新项目配置(每次更新配置文件后都需要运行)
sudo supervisorctl start laravel-toggle:* # 启动项目 (请根据实际情况修改项目名)

5、全部命令一览

sudo supervisorctl # 直接运行此命令可查看现正运行的任务列表
sudo supervisorctl restart laravel-toggle:* # 此命令可重启项目
sudo supervisord -c /etc/supervisord.conf # 此命令可加载supervisord的配置文件
sudo supervisorctl reread # 每次修改了supervisord.conf都需要此命令重新加载配置
sudo echo_supervisord_conf # 此命令可显示一个默认的supervisord配置文件,可以透过">"管道符写出配置
sudo supervisorctl update # 每次更新或添加了项目的配置文件都需要此命令来更新
sudo supervisorctl start 项目名:* # 此命令可启动项目
sudo supervisorctl restart 项目名:* # 此命令可重启项目
sudo supervisorctl stop 项目名:* # 此命令可停止项目
supervisorctl help # 查看更多帮助信息