laravel - 使用 Monit 监控 Laravel 队列工作线程

标签 laravel queue supervisord monit

我目前正在考虑从 Supervisor 迁移到 Monit,以监视 Laravel 队列工作线程。主要原因是能够监视 CPU、内存和设置电子邮件警报(据主管说,我必须安装另一个软件包),因为我希望尽快监视其他内容,例如 Redis,也许还有 Web 服务器的整体稳定性和性能。

就我在流程监控方面的有限知识而言,Monit 更强大并且更适合这项工作。

我能找到的有关 Laravel 和队列/作业监控的所有文档都涉及使用 Supervisor,并且在尝试手动设置它时,我陷入了为队列监听器设置 pid 文件的困境(我不是系统管理员) .

Laravel 有理由只支持 Supervisor 而根本不提及 Monit 吗? (https://laravel.com/docs/5.3/queues#queue-workers-and-deployment)

如果没有 - 有人可以帮助了解如何为每个 Laravel 队列工作程序设置 Monit 配置吗?

假设我在 /var/www/html/laravel 下有一个项目,并且我希望监视的进程为 /var/www/html/laravel/artisanqueue:work - -守护进程

我尝试关注 this question但没有取得多大成功。

最佳答案

如果您仍然需要答案:

当然可以设置 Monit 来控制您的队列,但需要注意一点(如 their FAQ 中所述);您需要将命令包装在 shell 脚本中。

在 Monit 配置文件(在 Ubuntu 14.04/etc/monit/monitrc 上)中,您可以添加:

    # beanstalk
    check process beanstalkd with pidfile /var/run/beanstalkd.pid
    start program = "/etc/init.d/beanstalkd start"
    stop program = "/etc/init.d/beanstalkd stop"
    if failed host 127.0.0.1 port 11300 then restart
    if 15 restarts within 15 cycles then timeout
    # beanstalk-queue
    check process beanstalk-queue with pidfile /var/run/beanstalk-queue.pid
    start = "YOUR_CHOSEN_PATH/beanstalk-queue.sh start"
    stop = "YOUR_CHOSEN_PATH/beanstalk-queue.sh stop"

然后在 YOUR_CHOSEN_PATH 中创建脚本 beanstalk-queue.sh:

    #!/bin/bash
    case $1 in
            start)
                    echo $$ > /var/run/beanstalk-queue.pid;
                    exec 2>&1 php /PATH_TO_YOUR_LARAVEL_INSTALLATION/artisan queue:work --daemon 1>/tmp/beanstalk-queue.out
                    ;;
            stop)  
                    kill `cat /var/run/beanstalk-queue.pid` ;;
            *)  
                    echo "usage: beanstalk-queue.sh {start|stop}" ;;
    esac
    exit 0

给它可执行权限就可以了!

PS 我使用的目录适用于 Ubuntu 14.04,请检查其他发行版。

关于laravel - 使用 Monit 监控 Laravel 队列工作线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39971787/

相关文章:

php - 我可以在哪里存储数据库中每行更改的数组?

python - Celery 中如何执行 rate_limit?

node.js - supervisord( Node 主管)3.0b2 无法升级到 3.1.2 Ubuntu 1404.1 LTS

elasticsearch - 如何使用主管在 docker 容器上运行 elasticsearch?

go - 通过 Supervisor 运行时奇怪的行为 Golang 应用程序崩溃

laravel - 在 App Engine Standard 上使用 Laravel Queue 和 Google Tasks

php - 对多行求和并按列分组更新。 (Laravel Eloquent )

Laravel 9 为 vue 2.6.12 安装 vue 路由器

c# - 如何将队列的值设置到另一个队列?

java - 在我的 Java 应用程序中发现 ClassCastException