在 Linux + Laravel 环境下使用队列(Queue),一般流程如下:
.env常用队列驱动:database、redis
使用 database(最简单)
QUEUE_CONNECTION=database
使用 redis(推荐生产环境)
QUEUE_CONNECTION=redis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
php artisan queue:table
php artisan migrate
php artisan make:job SendEmail
编辑 app/Jobs/SendEmail.php:
public function handle()
{
// 队列逻辑
}
use App\Jobs\SendEmail;
SendEmail::dispatch($user);
或延迟:
SendEmail::dispatch($user)->delay(now()->addMinutes(5));
php artisan queue:work
nohupnohup php artisan queue:work --queue=default --tries=3 &
安装:
yum install supervisor
# 或
apt install supervisor
配置 /etc/supervisor/conf.d/laravel-queue.conf:
[program:laravel-queue]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/laravel/artisan queue:work --tries=3
autostart=true
autorestart=true
user=www
numprocs=2
redirect_stderr=true
stdout_logfile=/var/www/laravel/storage/logs/queue.log
启动:
supervisorctl reread
supervisorctl update
supervisorctl start laravel-queue:*
php artisan queue:work # 单次执行
php artisan queue:listen # 监听(不推荐生产)
php artisan queue:retry all # 重试失败任务
php artisan queue:failed # 查看失败任务
php artisan queue:flush # 清空失败任务
✅ 队列不执行
queue:work.env 缓存:php artisan config:clear✅ 代码更新无效
php artisan queue:restart
✅ Linux 权限问题
chown -R www:www storage bootstrap/cache
如果你是 Redis / 定时任务 / 多队列 / 失败重试 场景,可以告诉我,我可以给你更具体的配置示例。