CentOS下使用supervisor配置Laravel多线程任务队列

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

  1. 安装

    1
    2
    yum install python-setuptools
    easy_install supervisor
  1. 创建配置文件及调整配置

    运行下列命令即可生成一个配置文件在/etc/supervisord.conf

    1
    echo_supervisord_conf > /etc/supervisord.conf

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

    首先打开配置文件:

    1
    vim /etc/supervisord.conf

    将下列配置节进行修改:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    [unix_http_server]
    file=/tmp/supervisor.sock;
    ...
    [supervisord]
    logfile=/tmp/supervisord.log;
    pidfile=/tmp/supervisord.pid;
    ...
    ;[include]
    ;files = relative/directory/*.ini

    修改之后:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    [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

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

    1
    supervisord -c /etc/supervisord.conf
  2. 创建项目配置文件

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

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    [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 # 日志存放路径(若无记得提前创建目录)
  3. 运行项目

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

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    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 # 查看更多帮助信息