PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Linux && Windows下基于ThinkPHP5框架实现定时任务(TP5定时任务)-结合Crontab任务大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

最近在项目上利用Tp5开发数据统计的时候碰到了很棘手的问题,数据量太大(上亿数据)的时候可能执行的速率有些慢,加了缓存,阿里云日志…… 然效率得到了提高,但是在加载页面的时候总有有一个时间长短不一的等待过程,这个过程可谓是让人最难受,因为等待页面数据刷新出来浪费时间,所以采用了定时任务去跑。

通俗来讲:我采用的方法是Tp5写好定时任务,然后linux-crontab做任务规划,每十分钟执行一次任务,将数据10分钟更新一次并存入redis缓存中,10分钟后执行的时候就是覆盖更新数据的过程。这样在页面展示的时候直接读取redis中已经存储的数据进行展示就好了。免得再去查询数据库

采用thinkPHP5的command工具和服务器的定时任务来做:

1.在/application/command(如果没有这个文件夹那就新建一个)文件夹中创建要配置的PHP文件,需要继承Command类,并重写configure和execute两个方法,例如:

/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("     ")是定义你定时任务的名字。

2.配置/application/command.PHP(没有自己添加)内容,加入上述的定时器文件

<?PHP

return [
    'app\command\Test'   //加入需要cmd或者linux-crontab执行的PHP文件
 ];

其中return是个数组,所以你可以存放多个任务文件

3.运行test命令

下面开始说一下在Windows中和Linux中分别执行的方法

Windows(测试):

    方法一:

进入到你的TP5项目根目录,cd C:\PHPstudy\PHPTutorial\WWW\work\project  当中,执行:

PHP think Test

运行PHP think Test命令test命令execute方法中运行的方法就会运行

Linux && Windows下基于ThinkPHP5框架实现定时任务(TP5定时任务)-结合Crontab任务

 

 

 没有报错的话,就会输出在excute中执行代码前后$output输出内容

    方法二:

一个.bat脚本文件:tast.bat文件

C:
cd C:\PHPstudy\PHPTutorial\WWW\work\project
PHP think Test

  点击文件自动执行。不过感觉方法二没什么必要,哈哈。

如果要在Windows中写定时的话,请自行百度,可以实现。但是这边在Window只做一个测试,看看我们TP5-command定时任务能否顺利执行。然后再Linux中进行crontab规划任务

 

Linux:

  将项目上线后,进入到项目根目录

PHP think查询可以被执行的命令,如下:

Linux && Windows下基于ThinkPHP5框架实现定时任务(TP5定时任务)-结合Crontab任务

 

 

 

 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,请注明来意。
标签: