在 Laravel 中使用 Supervisor 来管理队列进程非常简单。下面是一些步骤:
**安装 Supervisor:**在你的服务器上安装 Supervisor。你可以使用适合你的操作系统的包管理器来安装,例如在 Ubuntu 上可以使用 apt-get:
安装
sudo apt-get update
sudo apt-get install supervisor
**创建 Supervisor 配置文件:**在 Supervisor 的配置目录中创建一个新的配置文件。这个配置文件将用于定义 Laravel 队列进程。通常情况下,Supervisor 的配置目录位于 /etc/supervisor/conf.d/。你可以创建一个名为 laravel-worker.conf 的新文件:
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /path/to/artisan queue:work --sleep=3 --tries=3
autostart=true
autorestart=true
user=www-data
numprocs=8
redirect_stderr=true
stdout_logfile=/path/to/your/log/laravel-worker.log
请确保将 /path/to/artisan 替换为你的 Laravel 项目中 artisan 文件的路径,并将 /path/to/your/log/laravel-worker.log 替换为你想要将日志输出的路径。还要注意将 user 值更改为你的网站用户。
**重新加载 Supervisor 配置:**在编辑完配置文件后,重新加载 Supervisor 的配置以使新的配置生效:
sudo supervisorctl reload
**启动 Laravel 队列进程:**现在,你可以启动 Laravel 的队列进程。在 Laravel 项目的根目录中,运行以下命令:
php artisan queue:work --daemon
或者,你可以使用 php artisan queue:work --daemon --queue=yourqueue 来指定特定的队列名称。
**监控进程:**你可以使用 supervisorctl 命令来监控 Laravel 队列进程。例如,要查看进程状态:
sudo supervisorctl status
如果一切正常,你应该会看到 laravel-worker 进程处于运行状态。
通过以上步骤,你已经设置好了 Supervisor 来管理 Laravel 队列进程。Supervisor 将会确保 Laravel 的队列进程始终运行,并在发生错误时自动重启。
你可以使用 docker cp
命令将文件从 Docker 容器复制到宿主机。以下是示例命令:
docker cp <container_id>:/var/html/a.conf /host/path/for/a.conf
要将文件从宿主机复制到 Docker 容器中,你可以使用 docker cp
命令。以下是示例命令:
docker cp /host/path/for/a.conf <container_id>:/var/html/a.conf
附配置:
[program:lumeng] ; 是应用程序的唯一标识,不能重复
# 指定进程的命名规则:foo_00,foo_01...
process_name=%(program_name)s_%(process_num)02d
# command 必须。程序启动后执行的命令,可以是绝对命令,也可以是相对命令(在环境$PATH中搜索可执行文件)。受控的程序本身不应该是守护程序。
command=php /var/www/html/lumeng.com/artisan queue:work --sleep=3 --tries=3
# Supervisor 启动时自动启动该程序
autostart=true
# 指定进程挂掉时 Supervisor 自动重启进程
autorestart=true
###
stopasgroup=true
killasgroup=true
# 指定运行进程使用的用户,需要 Supervisor 以root用户运行。使用 setuid 切换用户,不会启动shell程序和改变环境变量
user=root
# 运行和监控的进程数量,进程位于laravel-worker组内,指定该值需同时设置process_name包含%(process_num)s
numprocs=3
# 将 stderr 错误输出重定向到 stdout 标准输出
redirect_stderr=true
# 将进程的 stdout 标准输出写入文件中,设为NONE不会创建任何日志文件。
stdout_logfile=/var/www/html/lumeng.com/storage/logs/queue-worker.log
下一篇: