前记

laravel实现定时器功能有两种方法:

  1. 使用 command 。

  2.   在闭包函数内写实现的方法。

  在这里我比较推荐第一种方法,因为第一种方法把具体的实现抽离出来了,看起来简单且富有逻辑。

  这里给出官方文档的地址,本文中的大部分内容都参照官方文档。虽然是英文版的,但小伙伴们要习惯看啊,真的,英文文档看多了也就没什么的了。

  官方文档链接:https://laravel.com/docs/5.6/scheduling


利用command实现定时器功能:

1. 首先你要利用laravel new xxx(项目名)新建一个项目,并找到Kernel.php,具体的路径看下面的截图:

2. 接着我们看Kernel.php中的内容

这边有个问题需要注意下:时间不能设置为("24:00"),系统会报错。

3. 接着我们command的具体实现:

 4. 在cron中设置定时触发。  

crontab -l 展示crontab 中的数据、crontab -e修改crontab中的数据

  前面三步很好做,很简单。在第4步有一个坑。

坑坑坑:时区问题。

  cron是什么?cron服务器可以根据配置文件约定的时间来执行特定的作务。也就是说,你需要在cron的配置文件里告诉cron,在什么时间,以什么样的频率,执行什么样的指令。

      比如:* * * * * /usr/bin/php /home/vagrant/HappySleep/artisan schedule:run 这个指令。

* * * * *的意思就是每分钟执行一次。这个执行一次执行的是schedule代码。这个时候你可能会想,这玩意儿和everyMinute有什么关系呢?
它们的关系就是你一分钟执行一次schedule,然后schedule一分钟执行一次everyMinute的命令行。

那如果没有schedule:run,只有everyMinute会出现什么情况呢?

schedule不执行,everyMinute自然也不会执行。

那如果schedule:run是5分钟执行1次,everyMinute执行频率是怎样的呢?

我猜测哈:everyMinute应该是5分钟执行1次,因为只有调用schedule:run的时候它才会被执行。

这个有待验证,会尽快验证一下的。 那schedule:run 和 everyMinute的时间频率是怎样的呢?
有待验证!

  /usr/bin/php /home/vagrant/HappySleep/artisan schedule:run 是具体的命令。

  它由三部分组成:/usr/bin/php、/home/vagrant/HappySleep/artisan、schedule:run。

  其实可以缩减为php artisan schedule:run

  是不是很熟悉?对了,就是php命令。

  只不过我们担心cron找不到php这个指令控制器的位置,就使用/usr/bin/php告诉cron它的位置。

  担心cron找不到是哪个文件,就告诉cron是/home/vagrant/HappySleep这个文件。然后执行artisan。

  后面的schedule:run意思是,执行里面的schedule命令。

  指令讲完之后就给大家讲讲坑的问题:laravel默认的有一个时区,而你的服务器或者自己的电脑也有一个时区,两个时区不一样,时间就不同步,时间不同步,你的命令虽然会被调用,但是不是在你设置的时间调用,导致你认为自己的程序出了问题。所以要确定项目时区和服务器时区是不是在同一时区。

在laravel项目里的下图的app.php文件内,修改'timezone' => 'PRC',意思是修改项目内的时区为中国时区。

在你的服务器中利用tzselect,修改自己服务器的时区。具体教程看这个:

   https://www.cnblogs.com/Jim-william/p/6873823.html   写的非常棒!!!感谢。

退出方案:
ctrl+X

   到这里这篇博客就结束了!静以修身,俭以养德。出现问题不可怕,要冷静思考为什么会出现问题,然后找到方法去解决。

最新文章

  1. nginx location各种修饰符的匹配优先级
  2. 全面了解 Linux 服务器 - 4. 查看 Linux 系统的平均负载
  3. asp.net实现手机号码归属地查询,代码如下
  4. php中常用设置
  5. sql server 自定义函数
  6. COJ 3012 LZJ的问题 (有向图判环)
  7. es3中使用es6/7的字符串扩展
  8. Android RelativeLayout常用属性介绍
  9. 微博评论箱的隐藏Bug解决
  10. python中元组/列表/字典/集合
  11. Python变量和常量
  12. 阿里java代码检测工具p3c
  13. Linux Shell自动交互/人机交互的三种方法
  14. windows Server 2008 R2 添加新用户时密码不满足密码策略的要求
  15. [Tensorflow] Object Detection API - retrain mobileNet
  16. Linux设置时间
  17. sql server 2008 身份验证失败 18456
  18. TCP握手与socket通信细节
  19. Gitlab+Jenkins学习之路(十一)之Jenkins自动触发构建和发布
  20. 使用git-premit时的问题

热门文章

  1. IO(基础知识)
  2. Python入门之Python的单例模式和元类
  3. Java序列化流-ObjectOutputStream、ObjectInputStream
  4. Delphi XE5 for Android (七)
  5. POJ 1679 The Unique MST (次小生成树)题解
  6. Spring Cloud微服务体系搭建
  7. 【Android实验】 数据存储与访问sqlite
  8. 使用 PYTHON 为 PIP 搭建 HTTP 代理
  9. 2018/7/18Bad English
  10. UVa 1614 奇怪的股市