Day21 Laravel - command & schedule

有些事情是每天都固定会做的事情,譬如每个平日早上都要看一下美股有没有崩盘才有机会财富重新分配一下,每天下午一点半台股收盘时又赚了几个便当钱,这种每天都要做但流程很繁琐的就非常适用於今天的介绍:command

先前在介绍artisan时有提到将这些繁琐的事情作成一个command这样只要一键输入即可获得服务,但想要获得股票收盘价这种服务还是需要更多的技术性的,所以还是先从基础介绍起,先来试试看以一键可以在留言板sayHello为目标来当第一个command范例吧

php artisan make:command sayHello

接着就可以在app/Console/Commands/下面找到sayHello.php档案,里面有两个属性及一个功能要特别介绍

  1. signature
    因为这是一个自定义的artisan指令,所以想要用artisan来触发就必须给这个功能一个专属的名字,因为目标是在留言板sayHello,所以就设定为sayHello,之後要触发这个指令就只要下php artisan sayHello即可
  2. description
    当只用php artisan list时可以看到每个指令都有自己的介绍,就是利用这个属性来描述该指令的用处,那就将它设定为Say hello to every by message board
  3. handle
    这个function就是要处理指令被触发时所要执行的内容,因为目标是要在留言板say hello,所以会在最上方引入Message的Model use App\Models\Message;,然後在handle内实现功能
Message::create([
    'member' => 'admin',
    'message' => 'Hello everyone',
]);

完成後可以使用php artisan list来确认是不是已经有这个功能了
https://ithelp.ithome.com.tw/upload/images/20210921/20115048kPzTvGs1ZX.png

之後就可以使用指令来测试看看功能是否正常

php artisan sayHello

https://ithelp.ithome.com.tw/upload/images/20210921/20115048CUazHnPKpv.png

妥妥的没有问题。

另外一个小撇步可以在signature属性使用冒号来做群组分类,例如都是在处理留言板的command就在前面加上一个message:做前缀,这样command越写越多时会比较容易分类,新增一个sayHi来当范例

php artisan make:command sayHi

将sayHello的signature改为message:sayHello
sayHi的signature改为message:sayHi

此时再使用php artisan list就可以看到这两个指令已经被归类在一起了
https://ithelp.ithome.com.tw/upload/images/20210921/201150480HNT6xvXVT.png


既然都有了一键执行的方法,能不能再更懒惰一点,让系统自己定时执行就好,连打指令都可以省下了,那就需要搭配schedule的功能了。

/app/Console/之下可以找到一个Kernel.php的档案将它打开,今天的目标先专注在schedule这个function就好,先将今天的command已一分钟sayHello一次、五分钟sayHi一次的频率写好。

$schedule->command('message:sayHello')->everyMinute();
$schedule->command('message:sayHi')->everyFiveMinutes();

接着来介绍一下schedule的四大指令

schedule:list
schedule:run
schedule:test
schedule:work
  1. schedule:list
    顾名思义可以将所有自己设定的scheduls列表出来,并且可以得知下次的执行时间为何
  2. schedule:run
    将设定好的schedule执行单次,有点像测试执行结果的概念
  3. schedule:test
    检查schedule是否有编译上的错误,并不会真的运行
  4. schedule:work
    开始运行所有的schedule,但此时terminal会被占用着,当然也有不占用terminal的作法,这就会需要用到作业系统本身的crontab,今天先暂且不谈

此时下完schedule:work後等待五分钟就可以确认一下功能是否正常了

https://ithelp.ithome.com.tw/upload/images/20210921/20115048Hnx4pMbqqJ.png

确认每分钟都会有一个Hello并於每五分钟为单位会出现一次Hi,今天的任务就算成功了,另外要提到的是我在建立sayHi这个schedule时因为没有在上方引入Message的Model所以一直不会有sayHi的讯息写入资料库,让我找问题找了蛮久,最後是在storage/logs里的log纪录找到原因,由此可知schedule在运行时有些错误是会被直接忽略的这点要特别注意一下。

排程能做的事情无穷无尽,就像这30天的文章也是利用排程自动上传的,今天的介绍就到这边结束了,谢谢观看的各位,请记得按赞分享开启小铃铛,你的支持会让按赞数+1。


<<:  【Day21】什麽是函式?

>>:  初探编码的世界,Ruby 30 天刷题修行篇第六话

第 05 天 多加尝试突破自我( leetcode 100 )

https://leetcode.com/problems/same-tree/descripti...

【领域展开 11 式】网站制作中,请 Google 不要搜寻到我 > <

网页施工中,请稍後再回来 虽然昨天将子母主题做汇入,本来今天预定要选定主题做汇入,但是在参考两篇文章...

27.unity换图片表情

换图片就是换Sprite sprite是物件的皮,每个看的见的gameobject都有sprite,...

JS 30 - 将 JSON 资料应用到统计学!

大家好! 今天我们要实作解析 JSON 资料,并计算资料的变异数。 我们进入今天的主题吧! 公式 母...

18.移转 Aras PLM大小事-快速贴入ECR受影响物件

这篇一样是Excel复制了很多料号,然後贴入ECR受影响物件 左边一个输入框,右边是系统讯息,上面一...