大佬教程收集整理的这篇文章主要介绍了Linux && Windows下基于ThinkPHP5框架实现定时任务(TP5定时任务)-结合Crontab任务,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
最近在项目上利用Tp5开发数据统计的时候碰到了很棘手的问题,数据量太大(上亿数据)的时候可能执行的速率有些慢,加了缓存,阿里云日志…… 虽然效率得到了提高,但是在加载页面的时候总有有一个时间长短不一的等待过程,这个过程可谓是让人最难受,因为等待页面数据刷新出来浪费时间,所以采用了定时任务去跑。
通俗来讲:我采用的方法是Tp5写好定时任务,然后linux-crontab做任务规划,每十分钟执行一次任务,将数据10分钟更新一次并存入redis缓存中,10分钟后执行的时候就是覆盖更新数据的过程。这样在页面展示的时候直接读取redis中已经存储的数据进行展示就好了。免得再去查询数据库。
采用thinkPHP5的command工具和服务器的定时任务来做:
/application/command/Test.PHP
一定要记得extends继承Command
<?PHP namespace app\admin\command; use think\console\Command; use think\console\Input; use think\console\Output; class Test extends Command {
//配置定时器的信息 protected function configure(){ $this->setName('Test')->setDescription("计划任务Test");
}
protected function execute(Input $input, Output $output){
//输出到日志 $output->writeln('Date Crontab job start...'); /*** 这里写计划任务列表集 START ***/ $this->testWork();
//或者直接写你的代码逻辑,建议封装或者调用方法,在其它方法写好直接调用,简洁干净 /*** 这里写计划任务列表集 END ***/ $output->writeln('Date Crontab job end...'); } private function testWork(){ echo "定时任务testWork"; } }
其中:configure函数是在命令行中用list命令列出所有任务的时候回显示的出的提示,execute函数是说要执行的命令,在这里可以直接调用其他函数,完成例如统计等任务工作,然后用output输出到命令行
configure中的$this->setName(" ")是定义你定时任务的名字。
<?PHP return [ 'app\command\Test' //加入需要cmd或者linux-crontab执行的PHP文件
];
下面开始说一下在Windows中和Linux中分别执行的方法。
Windows(测试):
方法一:
进入到你的TP5项目根目录,cd C:\PHPstudy\PHPTutorial\WWW\work\project 当中,执行:
PHP think Test
运行PHP think Test命令test命令execute方法中运行的方法就会运行
没有报错的话,就会输出在excute中执行代码前后$output输出的内容
方法二:
C: cd C:\PHPstudy\PHPTutorial\WWW\work\project PHP think Test
如果要在Windows中写定时的话,请自行百度,可以实现。但是这边在Window只做一个测试,看看我们TP5-command定时任务能否顺利执行。然后再Linux中进行crontab规划任务
Linux:
将项目上线后,进入到项目根目录
PHP think查询可以被执行的命令,如下:
PHP think Test
看看能否跑通。没问题继续。
接下来再Linux中设定crontab任务
有两种方式,效果是一样的:
1.连接到服务器,输入 crontab -e,写入:
0 0 * * * PHP /home/www/pre/app_api/PHP/sdk/think Test > /dev/null 2>&1
其中红色 think 不是目录,相当于我们在Windows中 PHP think Test 一样。
注意:1).0 0 * * * 是crontab的定时表达式,表示每天的0点0分执行该文件,具体详情可以访问《crontab定时写法》进行学习。 2).可以使用crontab -l 的命令查看已登录的账户有几个定时器。 3).可以到 /var/log/cron 文件查看日志文件,便于追踪错误。 还有一种方法就是写sh脚本执行,但是个人认为用不着写sh脚本 参考:https://www.cnblogs.com/seizemiss/p/9467558.html这个根据window和Linux系统不一样,定时任务设置方法也不同,可以自行百度,我用的是本地的windows服务,详情看百度经验:Windows计划任务设置,定时执行指定脚本
有问题可以私信me,要大胆去尝试哈。
以上是大佬教程为你收集整理的Linux && Windows下基于ThinkPHP5框架实现定时任务(TP5定时任务)-结合Crontab任务全部内容,希望文章能够帮你解决Linux && Windows下基于ThinkPHP5框架实现定时任务(TP5定时任务)-结合Crontab任务所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。