当前位置: 首页 > 知识库问答 >
问题:

如何保持Laravel队列系统在服务器上运行

丌官博文
2023-03-14

我最近设置了一个Laravel队列系统。最基本的是cronjob调用一个命令将作业添加到队列中,并调用第二个命令发送电子邮件。

当我通过ssh连接到服务器并运行php artisan queue:listen时,系统会工作,但如果我关闭终端,侦听器就会关闭,作业会堆积起来并在队列中等待,直到我通过ssh重新连接并再次运行listen。

保持队列系统在后台运行而不需要通过ssh保持连接打开的最佳方法是什么?

我尝试运行php artisan队列:work--daemon,它完成了队列中的作业,但是当我关闭我的终端时,它关闭了连接和后台进程。

共有3个答案

龙繁
2023-03-14

命令

nohup php artisan queue:work --daemon &

如果正确,它将允许进程在关闭SSH连接后继续;然而,这只是一个短期的解决办法。一旦服务器重新启动或任何问题导致进程停止,您将需要返回并再次运行该命令。当这种情况发生时,你永远不会知道。这可能发生在周五晚上,因此最好实施长期解决方案

我最终切换到Supervisort,这可以在Ubuntu上安装,就像

sudo apt-get install supervisor 

对于AWS-AMI或RedHat用户,您可以遵循我在本问题中概述的一组说明:

在AWS AMI Linux服务器上设置Supervisord

弘承业
2023-03-14

您应该使用linux管理器

安装很简单,在Ubuntu上我可以用以下命令安装它:

apt-get install supervisor

监控程序配置文件位于/etc/Supervisor/conf.d目录中。

[program:email-queue]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/laravel-example/artisan queue:work redis --queue=emailqueue --sleep=3 --tries=3
autostart=true
autorestart=true
user=forge
numprocs=2
redirect_stderr=true
stdout_logfile=/var/www/laravel-example//storage/logs/supervisord.log

对于每个流程,您应该创建一个新的流程配置文件。使用此配置,监听器将重试每个作业3次。此外,如果监听器失败或系统重启,监听器将重新启动。

何修能
2023-03-14

跑步

nohup php artisan queue:work --daemon &

将阻止命令退出注销。

尾随符号(

见诺胡普

nohup-运行对hangups免疫的命令,输出为非tty

这将把信息输出到运行命令的目录中名为nohup.out的文件中。如果您对输出没有兴趣,您可以将stdout和stderr重定向到 /dev/null,或者类似地,您可以将其输出到正常的laravel日志中。举个例子

nohup php artisan queue:work --daemon > /dev/null 2>&1 &

nohup php artisan queue:work --daemon > app/storage/logs/laravel.log &

但您也应该使用类似Supervisord的工具来确保服务保持运行,并在崩溃/故障后重新启动。

 类似资料:
  • 问题内容: 我正在使用redis在nodejs应用程序中提供会话支持。我已经安装了redis服务器,当我运行redis- server时,它可以工作,但是当我关闭终端redis时,它停止工作,并且不起作用。关闭终端后如何保持Redis服务器运行? 问题答案: 将Redis作为守护程序启动的最简单方法是编辑配置文件并更改以下行: 启动配置文件时,请确保在redis-server命令行上提供该配置文件

  • 我见过一堆教程,它们似乎做了与我想做的相同的事情,但由于某种原因,我的Docker容器退出了。基本上,我在Docker容器中设置了一个Web服务器和几个守护进程。我通过一个名为的bash脚本来完成这一过程的最后部分,该脚本通过DockerFile中的CMD运行。如下所示: 我在Dockerfile中启动它,如下所示: 我可以看到,当我手动运行事情时(即使用-i-t/bin/bash进入映像),所有

  • 我现在尝试在Kubernetes集群上运行一个带有shell(/bin/bash)的简单容器。 我认为有一种方法可以通过使用和detach选项(命令上的选项)来保持容器在Docker容器上运行。 但是容器会退出几秒钟(就像使用命令启动一样,没有上面提到的选项)。并且ReplicationController重复地再次启动它。 是否有一种方法可以像命令中的选项一样,使容器在Kubernetes上运行

  • 问题内容: 我现在正在尝试在Kubernetes集群上运行带有shell(/ bin / bash)的简单容器。 我以为有一种方法可以通过使用and detach选项(命令上的选项)来保持容器在Docker容器上运行。 例如, Kubernetes中有这样的选择吗? 我试过使用类似以下的命令来运行容器: 但是容器会退出几秒钟(就像使用不带我上面提到的选项的命令启动一样)。然后Replication

  • 问题内容: 我看过很多教程似乎都在做我想做的事情,但是由于某种原因,我的Docker容器退出了。基本上,我正在Docker容器内设置一个Web服务器和一些守护程序。我通过bash脚本(在Dockerfile中通过CMD运行)完成了最后部分。看起来像这样: 然后在Dockerfile中启动它,如下所示: 我可以看到,当我手动运行事物时(即使用-i -t / bin / bash进入映像),所有服务都

  • 我有一个运行Ubuntu 14.04的DigitalOcean服务器。我将它用作我的web开发项目的主机。现在我想开始在我的一个项目中使用Laravel,但我有一个问题。 在Ubuntu的/var/www/html文件夹中,我创建了一个文件夹,比如说,“project”。在这个文件夹中,我使用本教程安装了Laravel。现在一切都设置好了,我想运行Laravel,这样我就可以测试它并开始开发它。当