首页 > PHP > Laravel 如何保证队列的进程存活方法 检查php artisan queue:work是否在运行?

Laravel 如何保证队列的进程存活方法 检查php artisan queue:work是否在运行?

2025-03-01 14:07:07

在 Laravel 中,为了保证队列进程(即队列工作器)的存活,确保任务能够持续、稳定地被处理,可以采用以下几种常见的方法:

1. 使用 Supervisor 管理进程

Supervisor 是一个用 Python 编写的进程管理工具,它可以监控和控制多个进程,当进程意外终止时能自动重启。

安装 Supervisor

在不同的操作系统上安装方式有所不同,以 Ubuntu 为例:

sudo apt-get install supervisor

配置 Supervisor

创建一个 Supervisor 配置文件,通常存放在 /etc/supervisor/conf.d/ 目录下,例如创建一个名为 laravel-worker.conf 的文件:

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /path/to/your/laravel/project/artisan queue:work --sleep=3 --tries=3
autostart=true
autorestart=true
user=your_username
numprocs=8
redirect_stderr=true
stdout_logfile=/path/to/your/laravel/project/storage/logs/worker.log
  • command:指定要执行的队列工作器命令,--sleep=3 表示任务处理完后如果队列为空,休眠 3 秒;--tries=3 表示任务失败后重试 3 次。
  • autostart=true:Supervisor 启动时自动启动该进程。
  • autorestart=true:进程意外终止时自动重启。
  • user:指定运行进程的用户。
  • numprocs:指定要启动的进程数量。
  • stdout_logfile:指定进程的日志输出文件。

加载并启动配置

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*

2. 编写自定义监控脚本

你可以编写一个简单的 Shell 脚本或 PHP 脚本来监控队列进程的状态,并在进程停止时重新启动它。

Shell 脚本示例

#!/bin/bash

# 检查队列工作器进程是否正在运行
if ! pgrep -f "php artisan queue:work" > /dev/null; then
    # 如果进程未运行,则启动它
    cd /path/to/your/laravel/project
    php artisan queue:work --sleep=3 --tries=3 > /dev/null 2>&1 &
fi
 

将上述脚本保存为一个文件,例如 check_queue_worker.sh,并添加执行权限:

chmod +x check_queue_worker.sh

然后使用 crontab 定时执行该脚本,例如每分钟执行一次:

crontab -e

在打开的文件中添加以下行:

* * * * * /path/to/check_queue_worker.sh >> /dev/null 2>&1

3. 云服务提供商的进程管理功能

如果你使用的是云服务提供商(如阿里云、腾讯云等),它们通常提供了进程管理和监控功能。

以阿里云 ECS 为例

可以使用阿里云的云监控服务来监控队列进程的状态。设置相应的监控规则,当进程异常退出时,触发报警并可以通过自动化运维功能自动重启进程。

4. 使用 Laravel Horizon(针对 Redis 队列)

Laravel Horizon 是 Laravel 官方提供的用于管理 Redis 队列的工具,它提供了可视化的界面来监控和管理队列工作器。

安装 Horizon

composer require laravel/horizon
php artisan horizon:install

配置 Horizon

在 config/horizon.php 文件中进行配置,然后在 app/Providers/HorizonServiceProvider.php 中注册服务提供者。

启动 Horizon

php artisan horizon

Horizon 会自动管理队列工作器的进程,确保它们的存活,并提供了详细的监控信息和错误处理机制。

通过以上方法,可以有效地保证 Laravel 队列进程的存活,确保任务能够稳定、可靠地处理。

使用 Ctrl+D 可将网站添加到书签
收藏网站
扫描二维码
关注早实习微信公众号
官方公众号
Top