ThinkPHP 6.1中通过Crontab(Linux)或任务计划程序(Windows)调用think命令实现定时任务,配合think-cron扩展封装任务类,确保清理缓存、同步数据等逻辑自动执行。

ThinkPHP 6.1项目中需让清理缓存、同步数据、发送通知等逻辑在指定时间自动运行,不能依赖人工点击或网页访问触发,必须通过可落地的定时执行机制实现。
用系统级Crontab调用think命令(Linux服务器首选)
第一步:确认项目根目录下存在可执行入口文件 think,且具有执行权限。若无,请先运行 chmod +x think。
第二步:执行 crontab -e,进入编辑模式,在末尾新增一行:
【*/10 * * * * cd /var/www/myapp && /usr/bin/php think cron:run >> /var/log/think-cron.log 2>&1】
立即学习“PHP免费学习笔记(深入)”;
这行表示每10分钟切换到项目目录并执行一次任务调度检查;/usr/bin/php 是PHP CLI解释器真实路径,务必用 which php 确认,写错会导致任务静默失败。
第三步:保存退出后,Crontab立即生效,无需重启服务。可通过 tail -f /var/log/think-cron.log 实时观察日志输出是否正常。
Windows环境下用任务计划程序+bat脚本
方法一:准备CLI专用入口文件
在项目根目录新建 index_cli.php,开头加入 define('MODE_NAME', 'cli');,其余内容复制原 index.php 的核心逻辑。这样既不影响Web访问,又能隔离CLI运行环境。
方法二:编写bat脚本
新建 run_cron.bat,内容如下:
D:
cd /d D:\www\myapp
"C:\php\php.exe" D:\www\myapp\index_cli.php cron:run > D:\logs\cron.log 2>&1
【注意:路径中的盘符、斜杠方向、空格、引号缺一不可,尤其是php.exe和入口文件路径必须用英文双引号包裹,含空格路径否则会报错】
方法三:配置Windows任务计划
打开“任务计划程序”→右键“任务计划程序库”→“创建基本任务”,名称填“TP6定时清理”,触发器选“每天”,时间设为03:00,操作选“启动程序”,程序填入D:\www\myapp\run_cron.bat,起始于填D:\www\myapp。
用think-cron扩展实现任务类封装
第一步:安装扩展
执行 composer require yunwuxin/think-cron:*,若提示版本冲突,改用 composer require yunwuxin/think-cron:3.0.0。
第二步:创建任务类
在 app/task/ 目录下新建 CacheCleanTask.php:
use yunwuxin\cron\Task;
class CacheCleanTask extends Task
{
public function configure()
{
$this->hourly();
}
protected function execute()
{
\think\Cache::clear();
echo "缓存已清空\n";
}
}
第三步:注册任务
在 config/extra/cron.php 中返回:
return [
'tasks' => [
\app\task\CacheCleanTask::class,
],
];
第四步:启动监听
在服务器后台执行 php think cron:schedule,该命令会常驻运行并每60秒检查一次任务时间。若需开机自启,请配合 supervisor 或 systemd 管理进程生命周期。



















