在 Ubuntu 上使用 ThinkPHP 队列,通常分为 环境准备 → 配置队列 → 编写任务 → 启动队列_worker 几个步骤。下面以 ThinkPHP 6 / 8 + Redis 驱动 为例(最常用)。
sudo apt update
sudo apt install php php-cli php-redis redis-server
sudo systemctl enable redis-server
sudo systemctl start redis-server
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
或手动创建:
app/job/TestJob.php
示例:
namespace app\job;
use think\queue\Job;
class TestJob
{
public function fire(Job $job, $data)
{
// 处理逻辑
echo "处理任务:" . $data['name'] . PHP_EOL;
// 删除任务
$job->delete();
}
// 失败处理
public function failed($data)
{
// 记录日志等
}
}
use think\facade\Queue;
Queue::push(\app\job\TestJob::class, [
'name' => 'ThinkPHP'
]);
或延迟执行:
Queue::later(60, \app\job\TestJob::class, $data);
php think queue:work
或指定队列:
php think queue:work --queue default
nohup php think queue:work --daemon &
安装:
sudo apt install supervisor
新增配置:
sudo nano /etc/supervisor/conf.d/queue.conf
内容:
[program:thinkphp-queue]
command=php /var/www/html/think queue:work --daemon
directory=/var/www/html
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
# 查看失败任务
php think queue:failed
✅ Redis 必须启动
✅ 使用 --daemon 性能更好
✅ 生产环境一定用 Supervisor
✅ 任务里不要写 die/exit
如果你用的是 ThinkPHP 5 / 数据库队列 / RabbitMQ,或者想要 失败重试机制示例,可以继续问我。