Laravel进阶系列笔记--(九)Laravel win10下的简单定时任务

作者: 温新

分类: 【Laravel】

阅读: 2576

时间: 2021-08-19 13:06:04

作者:温新

时间:2021-07-10

hi,我是温新,一名PHPer。

windows下使用Laravel定时任务相对于Linux来说复杂了不少。定时任务是一个经常需要用到的功能。对于定时任务,windows与Linux我都会写个记录。

Laravel对定时任务执行的时间段定义了很多方法,如每分钟执行,每两分钟执行...总之,用起来很方便。

定时任务在App\Console\Kernerl.php文件中的schedule方法中进行定义。

使用call方法实现简单的计划任务

第一步:编写定时任务

文件:app/Console/Kernel.php

<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(119, 0, 136)">use</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">Illuminate\Support\Facades\Log</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(119, 0, 136)">protected</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">function</span> <span style="box-sizing: border-box;color: rgb(0, 0, 255)">schedule</span>(<span style="box-sizing: border-box;color: rgb(0, 0, 0)">Schedule</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$schedule</span>)</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">{</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$schedule</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">-></span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">call</span>(<span style="box-sizing: border-box;color: rgb(119, 0, 136)">function</span>(){</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">        <span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 计划任务</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">        <span style="box-sizing: border-box;color: rgb(0, 0, 0)">Log</span>::<span style="box-sizing: border-box;color: rgb(0, 0, 0)">info</span>(<span style="box-sizing: border-box;color: rgb(170, 17, 17)">'使用call方法的定时任务,每分钟执行一次'</span>);</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">    })<span style="box-sizing: border-box;color: rgb(152, 26, 26)">-></span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">everyMinute</span>();</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">}</span>

第二步:终端手动执行定时任务

<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 0, 0)">php</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">artisan</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">schedule</span>:<span style="box-sizing: border-box;color: rgb(0, 0, 0)">run</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 返回信息</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">[<span style="box-sizing: border-box;color: rgb(17, 102, 68)">2021</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">-</span><span style="box-sizing: border-box;color: rgb(17, 102, 68)">07</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">-</span><span style="box-sizing: border-box;color: rgb(17, 102, 68)">09</span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">T16</span>:<span style="box-sizing: border-box;color: rgb(17, 102, 68)">15</span>:<span style="box-sizing: border-box;color: rgb(17, 102, 68)">44</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">+</span><span style="box-sizing: border-box;color: rgb(17, 102, 68)">00</span>:<span style="box-sizing: border-box;color: rgb(17, 102, 68)">00</span>] <span style="box-sizing: border-box;color: rgb(0, 0, 0)">Running</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">scheduled</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">command</span>: <span style="box-sizing: border-box;color: rgb(0, 0, 0)">Callback</span></span>

手动执行是一件很麻烦的事情,定时任务就要定时执行。windows中实现Laravel定时还是一件很麻烦的事件。为了节约篇幅,现在将定时任务分开来写。

第三步:创建windows执行的脚本任务

<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 0, 0)">h</span>:</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 0, 0)">cd</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">H</span>:<span style="box-sizing: border-box;color: rgb(0, 0, 0)">\phpstudy_pro\WWW\HyStudy\Laravel\laravel</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">-</span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">demo02</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 0, 0)">php</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">artisan</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">schedule</span>:<span style="box-sizing: border-box;color: rgb(0, 0, 0)">run</span> <span style="box-sizing: border-box;color: rgb(17, 102, 68)">1</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">>></span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">NUL</span> <span style="box-sizing: border-box;color: rgb(17, 102, 68)">2</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">>&</span><span style="box-sizing: border-box;color: rgb(17, 102, 68)">1</span></span>

将上述内容保存为bat文件,如我保存为schedule.bat

第四步:windows10实现定时任务

1)打开定时任务

win+R后输入taskschd.msc,如下图:

2)创建基本任务

9-1-schedule.png

3)编写[常规信息]

9-2-schedule.png

4)[触发器]选项,然后新建触发器

9-3-schedule.png

5)[操作]新建条件

9-4-shcedule.png

程序或脚本 选择第三步创建的schedule.bat文件。

这样定时任务就创建好啦,然后就等待执行吧~

定时任务执行后,会发现,每执行一次会有一个黑窗口弹出并快速消失了,这个很不友好。

第五步:因此定时任务执行时的黑窗口

编写如下内容,并将其保存为以.vbs结尾的文件,如我用的是laravel_schedule.vbs

<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 0, 0)">Set</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">ws</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">CreateObject</span>(<span style="box-sizing: border-box;color: rgb(170, 17, 17)">"Wscript.Shell"</span>)   </span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 0, 0)">ws</span>.<span style="box-sizing: border-box;color: rgb(0, 0, 0)">run</span> <span style="box-sizing: border-box;color: rgb(170, 17, 17)">"cmd /c C:\Users\45796\Desktop\schedule.bat"</span>,<span style="box-sizing: border-box;color: rgb(0, 0, 0)">vbhide</span></span>

注意:关于schedule.batlaravel_schedule.vbs这两个文件的路径最好一致。我这里将这两个文件全部放在地桌面。

我是温新

每天进步一点点,就一点点

请登录后再评论