在CentOS 7上安装和配置Supervisord以永久运行Laravel队列

40

我想在我的项目中使用Laravel队列系统,并希望在服务器后台永久运行php artisan queue:work,我搜索了一些内容,发现有一个命令行可以即使从ssh终端退出后也可运行,但在某些情况下可能会崩溃,给我带来严重的问题。所以过了一段时间,我发现有一个名为Supervisord的软件包,可以在服务器重新启动后重新启动该命令。因此,我想请有经验的人从0到100逐步帮助我安装Supervisord并在CentOS 7上进行配置,然后设置队列命令行。非常感谢!

3个回答

96

这里是如何在CentOS 7上安装和配置Supervisord以永久运行Laravel队列:

  1. easy_install supervisor
  2. yum install supervisor
  3. vim /etc/supervisord.conf 编辑“program”部分如下:
[program:laravel-worker]
command=php /path/to/app.com/artisan queue:work 
process_name=%(program_name)s_%(process_num)02d
numprocs=8 
priority=999 
autostart=true
autorestart=true  
startsecs=1
startretries=3
user=apache
redirect_stderr=true
stdout_logfile=/path/to/log/worker.log
  • systemctl enable supervisord 在启动时自动运行
  • systemctl restart supervisord 重启服务

  • 4
    你假定人们拥有easy_install,但是在我的情况下,我的新的CentOS并没有。要获取它:yum install -y python-setuptools,然后你就可以继续操作(除非你是root,否则所有命令都要在前面加上sudo)。这样做不起作用:yum install supervisor:因为它已经通过easy_install安装了。 - firepol
    如果您有像Fabric这样的部署工具,并且想在.conf文件中拥有多个脚本/程序,该怎么办呢? - TheRealChx101
    1
    首先运行 yum install epel-release。Supervisor 在默认的 CentOS 7 软件仓库中不可用。 - A. Khaled

    18

    希望这对有需要的人有所帮助,以下是我在 CentOS 7 上将 @Abdu 的答案整合后得到的步骤。

    1. 安装 Supervisor

    easy_install supervisor

    * 如果没有安装,执行 yum install -y python-setuptools 然后再执行 easy_install supervisor

    2. 预备工作

    为了使理想的设置运行起来,你应该运行以下命令...

    # create directory for supervisor logs
    mkdir /var/log/supervisor
    
    # create directory for supervisor configs
    mkdir -p /etc/supervisor/conf.d
    
    # create config directory for supervisor
    cat <<EOT >> /etc/supervisor/supervisord.conf
    ; supervisor config file
    
    [supervisord]
    logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
    pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
    childlogdir=/var/log/supervisor            ; ('AUTO' child log dir, default $TEMP)
    
    [rpcinterface:supervisor]
    supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
    
    [supervisorctl]
    serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL  for a unix socket
    
    [include]
    files = /etc/supervisor/conf.d/*.conf
    EOT
    
    # create systemctl service script
    cat <<EOT >> /lib/systemd/system/supervisord.service
    [Unit]
    Description=Supervisor process control system for UNIX
    Documentation=http://supervisord.org
    After=network.target
    
    [Service]
    ExecStart=/usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf
    ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown
    ExecReload=/usr/bin/supervisorctl -c /etc/supervisor/supervisord.conf $OPTIONS reload
    KillMode=process
    Restart=on-failure
    RestartSec=50s
    
    [Install]
    WantedBy=multi-user.target
    EOT
    

    完成这些步骤后,现在您应该能够使用systemctl启动和停止supervisor。要启动systemctl,请运行systemctl start supervisord。要查看supervisor的状态,请运行systemctl status supervisord

    您可以在/etc/supervisor/conf.d下创建任意数量的自定义配置。

    3. 在系统启动时启用

    您还应通过运行以下命令在启动时启用supervisord

    systemctl enable supervisord
    

    3
    如果您收到"unix:///var/run/supervisor.sock no such file"错误消息,请将以下内容添加到/etc/supervisor/supervisord.conf文件的顶部:[unix_http_server] file=/var/run/supervisor.sock ;(套接字文件的路径) chmod=0700 ; 套接字文件模式(默认为0700) - BuffK

    2
    在我的Bluehost帐户上,systemctl未运行,而使用chkserv来监视和重启进程,所以这里的两个答案对我来说并没有完全起作用。
    此外,我遇到了easy_install supervisor的错误,因为它试图安装新的4.x.x版本,该版本需要Python > 2.6,而2.6恰好是在我的机器上运行的Python版本。
    以下是适用于我的方法:
    1. yum install -y python-setuptools

    2. easy_install supervisor==3.4.0

    3. nano /etc/supervisord.conf 并添加

    "最初的回答"
    [supervisord]
    nodaemon=true
    
    [include]
    files = /etc/supervisor/conf.d/*.conf
    
    [program:laravel-worker]
    command=php artisan queue:work --tries=1
    autostart=true
    autorestart=true
    stderr_logfile=/var/log/queue.err.log
    stdout_logfile=/var/log/queue.out.log
    
    1. 输入nano /etc/chkserv.d/chkservd.conf命令,添加一行supervisord:1,然后保存文件。

    2. 使用touch /etc/chkserv.d/supervisord命令创建chkservd配置文件。

    3. 输入nano /etc/chkserv.d/supervisord命令,添加一行service[supervisord]=x,x,x,service supervisord restart,supervisord,root,然后保存文件。

    4. supervisord现在将显示在WHM的Service Manager下,并且chkservd将启动它并确保它保持运行状态。如果要手动启动它,只需运行supervisord

    有关向chkservd添加服务的更多信息,请点击此处


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接