热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何使LaravelQueue系统在服务器上运行

如何解决《如何使LaravelQueue系统在服务器上运行》经验,为你挑选了5个好方法。

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

当我进入我的服务器并运行php artisan队列时,系统工作:listen,但是如果我关闭我的终端,则监听器关闭,作业堆叠起来并排队,直到我重新进入并再次运行监听.

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

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



1> Ben Swinburn..:

运行

nohup php artisan queue:work --daemon &

注销时会阻止命令退出.

尾随&符号(&)导致进程在后台启动,因此您可以继续使用shell,而不必等到脚本完成.

见nohup

nohup - 运行一个免于挂断的命令,输出为非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这样的东西来确保服务保持运行并在崩溃/失败后重新启动.


首先我需要:http://stackoverflow.com/a/29292637/470749然后`nohup php artisan queue:work --daemon> storage/logs/laravel.log&`为我工作.注意:如果你想杀死nohup守护进程,你需要先运行类似`ps -ef | grep artisan`的东西来发现它的PID.然后你可以运行`kill [pid]`http://stackoverflow.com/q/17385794/470749

2> Manish Nakar..:

你应该使用linux supervisor

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

apt-get install supervisor

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次.如果监听程序失败或系统重新启动,Supervisor也会重新启动监听程序.


更多说明在这里,https://www.digitalocean.com/community/tutorials/how-to-install-and-manage-supervisor-on-ubuntu-and-debian-vps

3> zeros-and-on..:

命令

nohup php artisan queue:work --daemon &

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

我最终切换到Supervisord,这可以安装在Ubuntu上一样简单

sudo apt-get install supervisor 

对于AWS-AMI或RedHat用户,您可以按照我在此问题中列出的说明进行操作:

在AWS AMI Linux服务器上设置Supervisord


该答案仅适用于Ubuntu用户,我的回答链接到一个单独的问题,如何在基于RedHat的发行版上进行设置.此外,我回答了Dev 15 2016,其他答案仅针对Ubuntu用户,于2017年6月发布.

4> Harry Bosh..:

来自https://gist.github.com/ivanvermeyen/b72061c5d70c61e86875

isQueueListenerRunning()) {
            $this->comment('Queue listener is being started.');
            $pid = $this->startQueueListener();
            $this->saveQueueListenerPID($pid);
        }

        $this->comment('Queue listener is running.');
    }

    /**
     * Check if the queue listener is running.
     *
     * @return bool
     */
    private function isQueueListenerRunning()
    {
        if ( ! $pid = $this->getLastQueueListenerPID()) {
            return false;
        }

        $process = exec("ps -p $pid -opid=,cmd=");
        //$processIsQueueListener = str_contains($process, 'queue:listen'); // 5.1
        $processIsQueueListener = ! empty($process); // 5.6 - see comments

        return $processIsQueueListener;
    }

    /**
     * Get any existing queue listener PID.
     *
     * @return bool|string
     */
    private function getLastQueueListenerPID()
    {
        if ( ! file_exists(__DIR__ . '/queue.pid')) {
            return false;
        }

        return file_get_contents(__DIR__ . '/queue.pid');
    }

    /**
     * Save the queue listener PID to a file.
     *
     * @param $pid
     *
     * @return void
     */
    private function saveQueueListenerPID($pid)
    {
        file_put_contents(__DIR__ . '/queue.pid', $pid);
    }

    /**
     * Start the queue listener.
     *
     * @return int
     */
    private function startQueueListener()
    {
        //$command = 'php-cli ' . base_path() . '/artisan queue:listen --timeout=60 --sleep=5 --tries=3 > /dev/null & echo $!'; // 5.1
        $command = 'php-cli ' . base_path() . '/artisan queue:work --timeout=60 --sleep=5 --tries=3 > /dev/null & echo $!'; // 5.6 - see comments
        $pid = exec($command);

        return $pid;
    }
}



5> Lalit Baghel..:

1)sudo apt install supervisor

sudo apt-get install supervisor

2)cd /etc/supervisor/conf.d 3)在内部创建新文件

sudo vim queue-worker.conf

文件内容

[program:email-queue]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/html/laravelproject/artisan queue:work
autostart=true
autorestart=true
user=root
numprocs=2
redirect_stderr=true
stdout_logfile=/var/www/html/laravelproject/storage/logs/supervisord.log

4)sudo supervisorctl reread

运行此命令时获取输出queue-worker:available

5)sudo supervisorctl update

运行此命令时,获取输出queue-worker:added进程组

其他命令

1)sudo supervisorctl reload

运行此命令时获取输出重新启动主管

2)sudo service supervisor restart


推荐阅读
  • 题目描述:计算从起点到终点的最小能量消耗。如果下一个单元格的风向与当前单元格相同,则消耗为0,否则为1。共有8个可能的方向。 ... [详细]
  • Java中的引用类型详解
    本文详细介绍了Java中的引用类型,包括强引用、软引用、弱引用和虚引用的特点和应用场景。 ... [详细]
  • 关于进程的复习:#管道#数据的共享Managerdictlist#进程池#cpu个数1#retmap(func,iterable)#异步自带close和join#所有 ... [详细]
  • Spring Boot + RabbitMQ 消息确认机制详解
    本文详细介绍如何在 Spring Boot 项目中使用 RabbitMQ 的消息确认机制,包括消息发送确认和消息接收确认,帮助开发者解决在实际操作中可能遇到的问题。 ... [详细]
  • 本文详细介绍了Linux系统中用于管理IPC(Inter-Process Communication)资源的两个重要命令:ipcs和ipcrm。通过这些命令,用户可以查看和删除系统中的消息队列、共享内存和信号量。 ... [详细]
  • JUC(三):深入解析AQS
    本文详细介绍了Java并发工具包中的核心类AQS(AbstractQueuedSynchronizer),包括其基本概念、数据结构、源码分析及核心方法的实现。 ... [详细]
  • 服务器上的nginx使用logrotate来分割日志,设置为每天分割。但是logrotate似乎没有工作,日志并没有分割。服务器是CentOS6。为了找到原因 ... [详细]
  • #!binbash########################################################################## File Name : rsync_nobody.sh#  ... [详细]
  • 大华股份2013届校园招聘软件算法类试题D卷
    一、填空题(共17题,每题3分,总共51分)1.设有inta5,*b,**c,执行语句c&b,b&a后,**c的值为________答:5 ... [详细]
  • 驱动程序的基本结构1、Windows驱动程序中重要的数据结构1.1、驱动对象(DRIVER_OBJECT)每个驱动程序会有唯一的驱动对象与之对应,并且这个驱动对象是在驱 ... [详细]
  • 本文详细介绍了如何对一个整数的二进制表示进行逆序操作。通过多种方法,包括直接法、查表法和分治法,帮助读者全面理解和掌握这一技术。 ... [详细]
  • 我自己做了一个网站图片的抓取,感觉速度有点慢抓取4000张图片可能得用15分钟左右的时间,我百度看用线程可以加快抓取,然后创建了5个线程抓取,但是5个线程是同步执行同样的操作一个图片就 ... [详细]
  • 在iOS开发中,多线程技术的应用非常广泛,能够高效地执行多个调度任务。本文将重点介绍GCD(Grand Central Dispatch)在多线程开发中的应用,包括其函数和队列的实现细节。 ... [详细]
  • 优先队列是一种特殊的队列,不遵循先进先出原则。它分为最大优先队列和最小优先队列。最大优先队列总是将当前最大的元素优先出队,而最小优先队列则总是将当前最小的元素优先出队。本文将详细介绍如何使用二叉堆在C#中实现这两种优先队列。 ... [详细]
  • 本文详细介绍了 Oracle 数据库的自动备份机制及其安装步骤。通过具体示例,解释了系统变更号(SCN)和块结构在备份过程中的作用,以及热备份恢复的具体步骤。 ... [详细]
author-avatar
冰妞qb_424
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有