手机版

laravel5.5定时任务详解(演示)

时间:2021-08-19 来源:互联网 编辑:宝哥软件园 浏览:

首先,准备环境

服务器:linux(debian) nginx mysql php环境

框架:laravel 5.5(已确认运行通过)

要求:每天下午1点进行常规操作

二、计时任务的步骤

1、根据文档,创建一个命令

首先进入laravel/app/Console目录,控制台目录包含所有自定义的Artisan命令,可以使用make :命令生成。该目录中还有控制台/内核类,您可以在其中注册自定义Artisan命令并定义调度任务。

例如,我们创建了一个名为Test:的计划任务

//这里用laravel给出的php artisan来生成命令,这里的Test就是我们要生成的文件。//这里的artisan不仅表示laravel带来的命令,还表示laravel下的artisan目录,因为这个目录没有X,X是可执行权限,所以不能由执行。/artisan。您只能通过php执行php artisan make :命令测试2。创建完成后,打开控制台目录下的commands目录,我们会发现其中已经有一个文件

大致代码如下:

?phpnamespace App \ Console \命令;使用应用程序\服务\计算数据服务;使用照明\控制台\命令;Class Test扩展Command{ //这里表示的是laravel自动生成的名称,执行以下操作时可以使用受保护的$ signature=' test3360data//这里代表的是描述,没有用。受保护的$ description=“测试数据”;/* * *计算数据服务的服务属性*这里,因为需要用到我们的逻辑,所以要提前定义,这样使用下面的* @ var calculateddataservice */protected $服务就方便了;//这是laravel自己的构建方法。初始状态下为空。//我想在这里调用CalculateDataService类的一个方法,所以通过依赖注入的方式引入。public function _ _ construct(calculatedServiCe $ service){ parent : _ _ construct();$ this-service=$ service;}/* * *执行控制台命令。*这是我们执行操作的地方,也是命令要处理的业务。根据我们的需求,*调用类中的calculateData()方法,这是我们自己的需求逻辑部分。* @返回混合*/公共函数句柄(){ try { $ this-service-calculateData();} catch(\ Exception $ e){ $ this-error($ e-getMessage());} //line()方法是命令类中的一个自包含方法,可以输出我们定制的信息$ this-line('计算数据成功!');}}3.创建定时命令后,我们需要修改kernel.php文件

kernel.php文件主要定义命令的调度时间和命令的执行顺序。

这部分参考了官方文件:

http://laravelacademy.org/post/8484.html

4.我的kernel.php文件

?Php//命名空间部分类内核扩展控制台内核这里省略了{/* * *您的应用程序提供的artisan命令。*注意:这里介绍我们新创建的类。因为我们在这里使用命令名进行操作,所以不使用这个类名。但是引入了比较标准*您可以使用command方法通过命令名称或类来调度Artisan命令:* $ schedule-command(' emails : send-force ')-daily();* $ schedule-command(emails command : class,['-force '])-daily();* * @var数组*/protected $ commands=[test : CLaSS,CalculateData:class,UpdateOffset:class,];/* * *定义应用程序的命令计划。*注:* 1。这个方法根据自己的需求来决定计时方法的执行顺序。通过后面、前面等关键词进行控制。* 2.这相当于约定的计划执行时间。例如,以下调度任务在0:30 * @ param \ light \ console \ scheduling \ Schedule $ Schedule * @ return void */protected function Schedule(Schedule $ Schedule){//执行每天凌晨0.45同步阿里云数据的任务。并发送邮件至* * * $ schedule-command(' IOT : sync flow ')-after(function(){//更新偏移量,参数artisan :3360调用(' test : data ')不能添加在after中;})-在执行同步数据命令后,在(function () {//执行数据计算任务artis an :3360 call(' calculate : data ')之后;});}/* * *为应用程序注册命令。*//此部分由laravel自动生成,命令文件* @ return void */protected function commands(){ $ This-load(_ dir _ _)。/commands’)由我们生成。需要base _ path(' routes/console . PHP ');}}至于具体的调度方式schedule(),可以查看laravel文档,里面可以指定很多东西。我在这里使用钩子函数。当要同时执行多个计时任务时,后、前等方法可以使多个计时任务有序进行。

第三,落实我们的时机

虽然laravel的计时任务一直被认为非常强大,但它本质上离不开服务器上的cron脚本。

1.首先检查服务器上的计时条目

Crontab -l2,添加或编辑cron条目

Crontab -e3,在其中添加我们编写的方法路径

我们的预定任务有了新的增加。

首先是指定计划任务的执行时间

第二是正确编写项目的artisan目录路径

第三个schedule:run是执行我们之前写的任务调度,也就是kernel.php文件中的schedule方法。

如果自己测试的话,可以随便写一个定时任务,每分钟执行以下内容,这样就能准确知道自己的定时任务是否正确。

以上关于laravel5.5的演示是边肖分享的全部内容。希望能给大家一个参考,支持我们。

版权声明:laravel5.5定时任务详解(演示)是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。