在 Ubuntu + ThinkPHP 环境下使用队列(Queue),一般步骤是:安装队列依赖 → 配置队列驱动 → 编写任务 → 启动队列 worker。下面以 Redis 驱动 为例(最常用)。
sudo apt update
sudo apt install redis-server
启动并设置开机自启:
sudo systemctl start redis
sudo systemctl enable redis
测试:
redis-cli ping
# 返回 PONG 表示成功
ThinkPHP 官方队列扩展:
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
示例:
<?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)
{
echo "任务失败:" . $data['name'];
}
}
在控制器中:
use think\facade\Queue;
Queue::push(\app\job\TestJob::class, [
'name' => 'ThinkPHP'
]);
或延迟执行:
Queue::later(10, \app\job\TestJob::class, ['name' => '延迟任务']);
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
redis-cli
> keys *
> llen queues:default
✅ 任务不执行
✅ Ubuntu 权限问题
sudo chown -R www-data:www-data runtime
如果你用的是 数据库队列 / RabbitMQ / 定时任务,或者 ThinkPHP 6 / 8 具体版本,可以告诉我,我可以给你更精确的配置。