最近在改项目时发现几个方法每个月初需要执行一次,以前使用的人少为了省事没有使用定时任务,采用的人工请求,现在使用的人多了老是多点,因此改成了定时任务,在liunx下使用的crontab做定时任务。
但是发现TP中的某个function要在cli模式下运行不和浏览器一样不能使用inxex.php,因此通过查看相关文档解决了此问题,将此解决之道分享给大家节约大家时间。
1.首先需要在index.php同级目录下创建一个cli.php(名字自定义),其实就是将index.php复制一遍然后改个名字,同时改点东西,我将两个文件都写下来大家比较下就明白了。
index.php
<?php
if(version_compare(PHP_VERSION,'5.3.0','<')) die('require PHP > 5.3.0 !');
// 开启调试模式 建议开发阶段开启 部署阶段注释或者设为false
define('APP_DEBUG',true);
// 定义应用目录
define('APP_PATH','./App/');
//define('BIND_MODULE','Home');
// 引入ThinkPHP入口文件
require './ThinkPHP/ThinkPHP.php';
// 亲^_^ 后面不需要任何代码了 就是如此简单
cli.php
<?php
// 应用入口文件
// 检测PHP环境
if(version_compare(PHP_VERSION,'5.3.0','<')) die('require PHP > 5.3.0 !');
// 开启调试模式 建议开发阶段开启 部署阶段注释或者设为false
define('APP_DEBUG',true);
// 定义应用目录
define('APP_PATH',dirname(__FILE__).'/App/');
//define('BIND_MODULE','Home');
// 引入ThinkPHP入口文件
require dirname(__FILE__).'/ThinkPHP/ThinkPHP.php';
// 亲^_^ 后面不需要任何代码了 就是如此简单
2.在cli模式下测试下是否好使
//php cli.php路径 模块/控制器/方法
php /var/www/html/duizhang/cli.php Admin/Ceshi/test
3.测试正常后既可以使用crontab来创建定时任务了。
//打开crontab执行文件
crontab -e
//将命令写入
//我的是每月1号0点0分执行一次
0 0 1 * * php /var/www/html/duizhang/cli.php Admin/Ceshi/test
最后esc :wq 回车就好了
另外关于更多的crontab的知识点我会专门写一个博客来分享的。
希望这次的分享能帮助到有需要的人!