在 Laravel 中,为了保证队列进程(即队列工作器)的存活,确保任务能够持续、稳定地被处理,可以采用以下几种常见的方法:
Supervisor 是一个用 Python 编写的进程管理工具,它可以监控和控制多个进程,当进程意外终止时能自动重启。
在不同的操作系统上安装方式有所不同,以 Ubuntu 为例:
sudo apt-get install 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:*
你可以编写一个简单的 Shell 脚本或 PHP 脚本来监控队列进程的状态,并在进程停止时重新启动它。
#!/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
如果你使用的是云服务提供商(如阿里云、腾讯云等),它们通常提供了进程管理和监控功能。
可以使用阿里云的云监控服务来监控队列进程的状态。设置相应的监控规则,当进程异常退出时,触发报警并可以通过自动化运维功能自动重启进程。
Laravel Horizon 是 Laravel 官方提供的用于管理 Redis 队列的工具,它提供了可视化的界面来监控和管理队列工作器。
composer require laravel/horizon
php artisan horizon:install
在 config/horizon.php
文件中进行配置,然后在 app/Providers/HorizonServiceProvider.php
中注册服务提供者。
php artisan horizon
Horizon 会自动管理队列工作器的进程,确保它们的存活,并提供了详细的监控信息和错误处理机制。
通过以上方法,可以有效地保证 Laravel 队列进程的存活,确保任务能够稳定、可靠地处理。