在 Ubuntu + 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
编辑定时任务:
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 官方支持类似 Laravel 的调度。
composer require topthink/think-schedule
在 app/schedule.php:
return [
'tasks' => [
[
'type' => 'command',
'command' => 'hello',
'schedule' => '* * * * *',
],
],
];
* * * * * /usr/bin/php /path/to/think schedule:run >> /dev/null 2>&1
✅ 好处:
✅ PHP 路径正确
✅ 文件权限(www-data 或当前用户)
✅ 日志路径可写
✅ 时区一致(date.timezone)
✅ 使用绝对路径
每天凌晨执行:
0 0 * * * php /path/think hello
每 5 分钟:
*/5 * * * * php /path/think hello
如果你用的是 ThinkPHP 5 / 5.1 / 8,或者想用 Supervisor / 队列,可以告诉我,我给你对应方案。