温馨提示×

ubuntu中thinkphp如何定时任务

小樊
50
2026-09-28 17:58:12
栏目: 编程语言

在 Ubuntu 中给 ThinkPHP 配置定时任务,通常有两种常见方式:

  1. 使用 Linux 的 crontab(最常用)
  2. 使用 ThinkPHP 自带的定时任务(ThinkPHP 6.1+ 推荐)

下面分别说明。


一、使用 Linux crontab(通用,推荐)

1. 编写 ThinkPHP 命令

在 ThinkPHP 中创建一个命令行脚本:

php think make:command Hello

生成的文件在:

app/command/Hello.php

示例:

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

protected function execute(Input $input, Output $output)
{
    // 你的业务逻辑
    $output->writeln('hello task run');
}

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

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

测试命令:

php think hello

2. 配置 crontab

编辑定时任务:

crontab -e

添加一行(假设项目在 /var/www/project):

* * * * * php /var/www/project/think hello >> /var/www/project/runtime/cron.log 2>&1

含义:

  • 每分钟执行一次
  • 日志写入 runtime/cron.log

常用示例:

# 每天凌晨 1 点
0 1 * * * php /var/www/project/think hello

# 每 5 分钟
*/5 * * * * php /var/www/project/think hello

3. 注意事项

  • php 要使用绝对路径(如 /usr/bin/php)
  • 确保 runtime 目录可写
  • 查看日志:
tail -f /var/www/project/runtime/cron.log

二、使用 ThinkPHP 6.1+ 自带定时任务(推荐)

ThinkPHP 6.1 提供了 Schedule 调度器。

1. 安装

composer require topthink/think-schedule

2. 定义任务

在 app/schedule/Task.php:

use think\schedule\Schedule;

return function (Schedule $schedule) {
    $schedule->command('hello')
             ->everyMinute()
             ->appendOutputTo(runtime_path() . 'schedule.log');
};

3. 添加一条 crontab

只需一条:

* * * * * php /var/www/project/think schedule:run

框架会自动调度任务。


三、常见问题

1. 命令不执行?

  • 用绝对路径
  • 手动执行看是否报错
  • 查看 /var/log/cron(CentOS)或 journalctl -u cron

2. 权限问题?

chown -R www-data:www-data /var/www/project
chmod -R 755 runtime

如果你使用的是 ThinkPHP 5.x 或 具体版本,可以告诉我,我可以给你对应示例。

0 踩