Linux环境下ThinkPHP定时任务设置
在Linux环境下,于ThinkPHP项目根目录创建command.php文件,首先定义命令类并设置命令名称属性,然后在execute方法内编写具体定时任务逻辑。注意命名空间需与项目保持一致,最后配置Linux的crontab定时任务,调用该命令文件。
在Linux环境下用ThinkPHP做定时任务,其实是个常规操作,但不少人在第一步就卡住了——不是命令写错,就是路径没配对。下面咱们从头捋一遍,保证每一步都讲清楚。

1. 创建定时任务文件
在ThinkPHP项目的根目录下,新建一个command.php文件。别嫌麻烦,所有定时任务的核心逻辑都放这里面。
2. 编写定时任务逻辑
打开command.php,写一个实际的命令。比如下面这个清理缓存的例子,结构很清晰:定义命令名称,然后在execute方法里执行具体操作。注意命名空间要跟项目保持一致。
setName('clearcache')
->setDescription('Clear cache');
}
protected function execute(Input $input, Output $output)
{
Cache::clear();
$output->writeln("Cache cleared successfully!");
}
}
3. 注册定时任务
在application目录下找到(或创建)console.php文件,把刚才定义的命令类注册进去。其实就是把类名加到commands数组里,框架会自动识别。
[
'app\command\ClearCache',
],
];
4. 设置定时任务调度
到了Linux这边,用crontab来调度。运行 crontab -e 打开当前用户的计划任务表,在末尾加一行。比如每分钟执行一次清理缓存:
* * * * * cd /path/to/your/thinkphp/project && php think clearcache
这里/path/to/your/thinkphp/project一定要换成你项目的实际路径,否则系统根本找不到命令。另外注意php think后面的命令名就是你在configure里定义的setName那个名称。
5. 保存并退出
crontab文件保存后,任务就生效了。可以手动跑一下看看效果:php think clearcache,如果能正常输出“Cache cleared successfully!”,那就说明整个链路没问题。
最后提一嘴:确保Linux上的PHP环境已正确配置,ThinkPHP项目路径已经加到系统的PATH变量里,否则php think可能找不到入口文件。当然,如果你直接用绝对路径调用/usr/bin/php /path/to/project/think clearcache也可以绕开环境变量问题。
