温馨提示×

linux laravel怎样配置队列

小樊
45
2026-10-07 03:21:57
栏目: 智能运维

在 Linux 下使用 Laravel 队列,一般包含以下几个步骤:安装依赖、配置队列连接、编写任务、启动队列 worker,以及用 systemd / supervisor 保证常驻运行。

下面以 Redis 队列 + Supervisor 为例(最常用方案)。


一、安装与配置

1. 安装 Redis(如未安装)

sudo apt update
sudo apt install redis-server

启动并设置开机自启:

sudo systemctl enable redis-server
sudo systemctl start redis-server

2. 安装 Laravel 队列依赖

composer require predis/predis
# 或
composer require laravel/horizon   # 推荐(可视化管理)

3. 配置 .env

QUEUE_CONNECTION=redis

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

4. 配置 config/queue.php

确保 redis 配置正确(默认已存在):

'redis' => [
    'connection' => 'default',
],

二、创建队列任务

php artisan make:job SendEmail

编辑 app/Jobs/SendEmail.php:

public function handle()
{
    // 队列逻辑
}

调用:

SendEmail::dispatch($data);

三、启动队列(测试用)

php artisan queue:work

或指定队列:

php artisan queue:work redis --queue=emails

⚠️ 这种方式关闭终端就停止,仅用于测试。


四、Linux 后台常驻(推荐 Supervisor)

1. 安装 Supervisor

sudo apt install supervisor

2. 创建配置文件

sudo nano /etc/supervisor/conf.d/laravel-worker.conf

内容示例:

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

路径请改成你的 Laravel 项目路径


3. 启动 Supervisor

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

查看状态:

sudo supervisorctl status

五、失败队列处理(重要)

1. 创建失败表

php artisan queue:failed-table
php artisan migrate

2. 查看 / 重试失败任务

php artisan queue:failed
php artisan queue:retry all

六、使用 Horizon(可选,强烈推荐)

composer require laravel/horizon
php artisan horizon:install
php artisan horizon

Supervisor 中改用:

command=php /var/www/laravel/artisan horizon

七、常见问题

✅ 队列不执行

  • 检查 QUEUE_CONNECTION
  • 检查 Redis 是否运行
  • 清除缓存:php artisan config:clear

✅ 代码更新不生效

php artisan queue:restart

✅ 权限问题

  • worker 用户需有 storage 写权限

如果你用的是 数据库队列 / RabbitMQ / Docker / 生产环境优化,可以告诉我,我可以给你对应配置方案。

0 踩