描述:
公司小项目,本系统的数据基础是从DMS系统数据库抽取的,且数据量是不断增长的(一月1w条),每条数据的状态也可能发生改变。所以需要使用定时任务解决数据同步的问题。
解决办法一、
百度出来的方法不起作用,把几个方法结合了一下成功了。概括来说,用tp的cli模式;写.bat文件;用windows的任务计划定时执行.bat文件。
具体步骤如下:
1、复制粘贴入口文件index.php,改名cli.php,在cli.php中加一句 define(‘APP_MODE’,'cli'); 此时,我们有两个入口文件,一个是web服务访问方式的index.php,另一个是cli模式访问的cli.php
2、修改cli.php中的APP_PATH和THINK_PATH如下:
define( 'APP_PATH', dirname(__FILE__).'/Application/' );
require dirname( __FILE__).’/ThinkPHP/ThinkPHP.php';
原文说原来是相对路径,会导致定时执行不能正确引入ThinkPHP.php文件,所以要修改成绝对路径。
3、在路径 /ThinkPHP/Mode 下面有个文件common.php ,复制一份出来,命名为cli.php,然后把里面引入日志类的代码注释或者删除掉:
'Think\Log' => CORE_PATH . ‘Log'.EXT,
4、删除缓存下面的所有缓存——记得是所有
5、新建控制器,命名为CliController.class.php,里面的index方法就写定时任务。
6、新建crontab.txt文件,内容如下:
d:
::进入项目根目录
cd D:\ZJS\www\huifang
::以php执行,注意cli.php后有空格,没有报错
D:\php\php7x32\php.exe cli.php /Home/cli
::用pause查看报错原因
pause
最后保存为crontab.bat文件。此时可以手动双击执行,查看结果。
7.控制面板----管理工具----任务计划程序
创建任务:
常规选项卡:起个名,根据实际选配置,这里选的win7和win SR2008
操作选项卡:新建,选择启动程序,程序或脚本选择刚才保存的crontab.bat文件
出发去选项卡:选择制定计划时,然后设置执行频率
--------------------------------------------------------------------------------------------------------------------------------------
以上方法可以实现,数据已经跑进来了。因为不懂原理,不懂什么是cli模式,所以多次进行了尝试,发现以下方式也能实现。
现在清空重来:
- 新建控制器,命名为CliController.class.php,里面的index方法就写定时任务。
-
新建crontab.txt文件,内容如下:
d:
::进入项目根目录
cd D:\ZJS\www\huifang::以php执行,注意index.php后有空格,没有报错
D:\php\php7x32\php.exe index.php /Home/cli
::用pause查看报错原因
pause最后保存为crontab.bat文件。此时可以手动双击执行,查看结果。
-
windows任务计划程序
就是把前面方法的1,2,3,4步骤去掉一样可行。
暂时不知道其中的弯弯儿。
解决办法二、
最终放弃以上方式,
项目部署服务器为windows服务器,定时任务写在linux服务器上