温馨提示×

ubuntu ThinkPHP怎么配置定时任务

小樊
45
2026-10-19 05:32:32
栏目: 编程语言

在 Ubuntu + ThinkPHP 环境下配置定时任务,通常有两种方式:

  1. Linux Cron + ThinkPHP 命令行
  2. ThinkPHP 自带任务调度(推荐,TP6+)

下面分别说明。


一、Linux Cron + ThinkPHP 命令行(通用)

1️⃣ 编写 ThinkPHP 命令

以 ThinkPHP 6 为例:

php think make:command Hello

生成文件:

app/command/Hello.php

示例:

namespace app\command;

use think\console\Command;
use think\console\Input;
use think\console\Output;

class Hello extends Command
{
    protected function configure()
    {
        $this->setName('hello')
             ->setDescription('定时任务示例');
    }

    protected function execute(Input $input, Output $output)
    {
        // 业务逻辑
        file_put_contents('task.log', date('Y-m-d H:i:s')."\n", FILE_APPEND);
        $output->writeln('Hello task run');
    }
}

注册命令(app/command.php):

return [
    'app\command\Hello',
];

测试:

php think hello

2️⃣ 配置 Ubuntu Cron

编辑定时任务:

crontab -e

添加:

* * * * * /usr/bin/php /var/www/html/thinkphp/project/think hello >> /dev/null 2>&1

说明:

  • * * * * *:每分钟执行
  • /usr/bin/php:PHP 路径(用 which php 查看)
  • /var/www/html/thinkphp/project/think:think 文件绝对路径

查看任务:

crontab -l

二、ThinkPHP 6 任务调度(推荐 ✅)

ThinkPHP 6 官方支持类似 Laravel 的调度。

1️⃣ 安装

composer require topthink/think-schedule

2️⃣ 配置调度

在 app/schedule.php:

return [
    'tasks' => [
        [
            'type' => 'command',
            'command' => 'hello',
            'schedule' => '* * * * *',
        ],
    ],
];

3️⃣ Cron 只执行一次

* * * * * /usr/bin/php /path/to/think schedule:run >> /dev/null 2>&1

✅ 好处:

  • 所有定时任务在 PHP 中管理
  • 不用频繁改 crontab
  • 支持闭包、URL、Shell

三、注意事项(很重要)

✅ PHP 路径正确
✅ 文件权限(www-data 或当前用户)
✅ 日志路径可写
✅ 时区一致(date.timezone)
✅ 使用绝对路径


四、常用示例

每天凌晨执行:

0 0 * * * php /path/think hello

每 5 分钟:

*/5 * * * * php /path/think hello

如果你用的是 ThinkPHP 5 / 5.1 / 8,或者想用 Supervisor / 队列,可以告诉我,我给你对应方案。

0 踩