在 Linux 下使用 Laravel 队列,一般包含以下几个步骤:安装依赖、配置队列连接、编写任务、启动队列 worker,以及用 systemd / supervisor 保证常驻运行。
下面以 Redis 队列 + Supervisor 为例(最常用方案)。
sudo apt update
sudo apt install redis-server
启动并设置开机自启:
sudo systemctl enable redis-server
sudo systemctl start redis-server
composer require predis/predis
# 或
composer require laravel/horizon # 推荐(可视化管理)
.envQUEUE_CONNECTION=redis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
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
⚠️ 这种方式关闭终端就停止,仅用于测试。
sudo apt install supervisor
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 项目路径
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*
查看状态:
sudo supervisorctl status
php artisan queue:failed-table
php artisan migrate
php artisan queue:failed
php artisan queue:retry all
composer require laravel/horizon
php artisan horizon:install
php artisan horizon
Supervisor 中改用:
command=php /var/www/laravel/artisan horizon
✅ 队列不执行
QUEUE_CONNECTIONphp artisan config:clear✅ 代码更新不生效
php artisan queue:restart
✅ 权限问题
storage 写权限如果你用的是 数据库队列 / RabbitMQ / Docker / 生产环境优化,可以告诉我,我可以给你对应配置方案。