在 Ubuntu + ThinkPHP 环境下使用队列(Queue),一般步骤如下(以 Redis 队列 为例,最常用):
sudo apt update
sudo apt install redis-server
启动 Redis:
sudo systemctl start redis
sudo systemctl enable redis
测试:
redis-cli ping
# 返回 PONG 表示成功
composer require topthink/think-queue
编辑配置文件:
config/queue.php
示例配置(Redis):
return [
'default' => 'redis',
'connections' => [
'redis' => [
'type' => 'redis',
'queue' => 'default',
'host' => '127.0.0.1',
'port' => 6379,
'password' => '',
'select' => 0,
'timeout' => 0,
'persistent' => false,
],
],
];
php think queue:job SendMail
生成文件:
app/job/SendMail.php
示例:
namespace app\job;
use think\queue\Job;
class SendMail
{
public function fire(Job $job, $data)
{
// 处理任务
echo "发送邮件给:" . $data['email'] . PHP_EOL;
// 删除任务
$job->delete();
}
// 失败处理
public function failed($data)
{
// 记录日志等
}
}
use think\facade\Queue;
Queue::push(\app\job\SendMail::class, [
'email' => 'test@qq.com'
]);
php think queue:work
或(推荐生产):
php think queue:work --daemon
nohup php think queue:work --daemon > queue.log 2>&1 &
安装:
sudo apt install supervisor
配置:
sudo nano /etc/supervisor/conf.d/queue.conf
内容:
[program:thinkphp-queue]
command=php /var/www/html/think queue:work --daemon
autostart=true
autorestart=true
user=www-data
redirect_stderr=true
stdout_logfile=/var/log/queue.log
重启:
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start thinkphp-queue
# 查看队列状态
php think queue:restart
# 监听(开发用)
php think queue:listen
✅ Redis 没启动 → 队列不执行
✅ 忘记 php think queue:work
✅ 任务类命名空间错误
✅ Ubuntu 用户权限问题(用 www-data)
如果你用的是 数据库队列 / RabbitMQ / 定时任务结合队列,可以告诉我,我可以给你对应方案。