在 Linux 上使用 Laravel 队列(Queue),一般流程如下(以最常用的 Redis 驱动为例):
# Redis(推荐)
sudo apt install redis-server
# 启动 Redis
sudo systemctl start redis
sudo systemctl enable redis
composer require predis/predis
# 或
composer require laravel/redis
.envQUEUE_CONNECTION=redis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
config/queue.php确认 redis 配置正确(默认已存在)。
php artisan make:job SendEmail
编辑 app/Jobs/SendEmail.php:
public function handle()
{
// 队列逻辑
logger('队列执行了');
}
调用任务:
SendEmail::dispatch();
// 或延迟
SendEmail::dispatch()->delay(now()->addMinutes(5));
php artisan queue:work
php artisan queue:work --daemon
sudo apt install supervisor
sudo vim /etc/supervisor/conf.d/laravel-queue.conf
内容:
[program:laravel-queue]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/your-project/artisan queue:work --sleep=3 --tries=3
autostart=true
autorestart=true
user=www-data
numprocs=2
redirect_stderr=true
stdout_logfile=/var/www/your-project/storage/logs/queue.log
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-queue:*
php artisan queue:failed
# 重试
php artisan queue:retry all
# 清理
php artisan queue:flush
php artisan queue:work # 处理队列
php artisan queue:listen # 监听(不推荐生产)
php artisan queue:restart # 重启队列(代码更新后)
php artisan queue:clear # 清空队列
如果你用的是 数据库队列 或 RabbitMQ,或者想了解 定时任务 + 队列,可以继续问我。