2

我有一个用 PHP 编写的 AMQP 消费者(一个 RabbitMQ 消费者),它始终在后台运行。此脚本在多个节点中运行,每个节点运行 12 次:运行 12 个 unix 后台进程:

php -f consumer.php &.

如果必须部署新版本的代码,目前我总是必须手动终止所有这些进程并在每个节点中一个接一个地再次启动它们。

  1. 有没有办法自动部署后台脚本?即把它放在部署管道中,然后重新加载它们,类似于使用https://deployer.org
  2. 有没有办法避免停机?
  3. 在这种情况下,ReactPHP 有什么帮助吗?
4

1 回答 1

1

在Laravel 文档中找到了答案(该解决方案适用于任何始终运行的后台进程,而不仅仅是 PHP 和 Laravel)。主管

配置主管

Supervisor 配置文件通常存储在 /etc/supervisor/conf.d 目录中。在这个目录中,你可以创建任意数量的配置文件来指示主管应该如何监控你的进程。例如,让我们创建一个 laravel-worker.conf 文件来启动和监控一个 queue:work 进程:

启动主管

创建配置文件后,您可以使用以下命令更新 Supervisor 配置并启动进程:

sudo supervisorctl 重读

sudo supervisorctl 更新

sudo supervisorctl start laravel-worker:*

它甚至可以帮助我使用单个配置文件和单个命令启动尽可能多的进程。同样,来自 Laravel 文档:

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /home/forge/app.com/artisan queue:work sqs --sleep=3 --tries=3
autostart=true
autorestart=true
user=forge
numprocs=8
redirect_stderr=true
stdout_logfile=/home/forge/app.com/worker.log

通过调用sudo supervisorctl start laravel-worker:*,将运行 8 个后台进程,如果出现错误也会重新启动。

如果我只是想用新发布的版本重新启动,我restart直接调用命令:

supervisorctl restart laravel-worker:*

我将把它作为 Deployer 任务集成到我的 CI/CD 管道中。

于 2016-10-23T00:44:56.227 回答