【问题标题】:Laravel Task Scheduling - when does the execution startsLaravel 任务调度 - 什么时候开始执行
【发布时间】:2021-07-22 12:06:48
【问题描述】:

Laravel 任务调度有everyMinute() 之类的选项,它将每分钟运行一个命令。我想知道它实际开始执行的时间是什么时候。是在我运行服务器时还是每分钟的特定秒数?
我正在尝试根据时差运行一个函数。这是一个伪代码

Run myCustomFunction() if diffInMin(now, customTime) <= 1

我以为它会运行 1 次,但每次运行两次。

【问题讨论】:

  • 调度程序每分钟通过一个 cron 任务运行,因此 everyMinute 在发生这种情况时执行。由操作系统决定何时是。它通常在那一分钟的 0 秒标记上非常准确(在我厌倦了它的操作系统上),但可能会根据服务器负载关闭
  • 我记录了任务处理程序,它显示它主要在每分钟的 :03/:04 秒执行。不像我在本地机器上运行那样准确。但我认为你在一分钟开始就运行它是对的

标签: laravel scheduled-tasks laravel-scheduler


【解决方案1】:

如@apokryfos 所述,调度程序通常根据服务器的当前时间在零秒标记附近每分钟运行一次。

假设customTime 是一个固定的DateTime,是什么让你认为你写的代码只会运行一次?

  • now() === customTime diffInMin() 为零时 条件diffInMin(now, customTime) &lt;= 1 将评估为真。
  • 下一分钟,diffInMin() 将变为 1,因此 条件diffInMin(now, customTime) &lt;= 1 仍将评估为真。

【讨论】:

  • 感谢您指出不同的错误。你能告诉我一个更好的方法来确保函数运行一次吗?
  • 在不了解完整上下文的情况下无法真正分辨。但既然你说它是一个命令,在App\Console\Kernel 中添加类似$schedule-&gt;command('name')-&gt;everyMinute(); 的东西就足够了。
猜你喜欢
  • 2012-07-25
  • 1970-01-01
  • 2017-01-26
  • 2016-12-01
  • 2012-06-01
  • 1970-01-01
  • 2019-09-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多