Php 在维护/停机期间错过的Laravel任务,正确的方法是什么?

Php 在维护/停机期间错过的Laravel任务,正确的方法是什么?,php,laravel,laravel-5,task,Php,Laravel,Laravel 5,Task,当Laravel 5应用程序停止运行(计划维护或其他),但几分钟后又恢复运行时,Laravel是否自动知道如何赶上并运行那些错过的任务 如果没有,处理可能错过的任务的追赶的首选方法是什么?任务调度系统似乎过于简单,无法确保任务在停机后运行(例如,如果任务每天或在特定时间运行);正如广告所说,它实际上只是按照给定的时间表运行任务 从本质上讲,停机/维护可能导致“赶不上公共汽车” 要确保关键任务运行,请执行以下操作: 添加用于存储关键任务上次运行时间信息的模型/机制 不要直接从调度系统运行关键任务

当Laravel 5应用程序停止运行(计划维护或其他),但几分钟后又恢复运行时,Laravel是否自动知道如何赶上并运行那些错过的任务


如果没有,处理可能错过的任务的追赶的首选方法是什么?

任务调度系统似乎过于简单,无法确保任务在停机后运行(例如,如果任务每天或在特定时间运行);正如广告所说,它实际上只是按照给定的时间表运行任务

从本质上讲,停机/维护可能导致“赶不上公共汽车”

要确保关键任务运行,请执行以下操作:

  • 添加用于存储关键任务上次运行时间信息的模型/机制
  • 不要直接从调度系统运行关键任务,而是将它们包装在经常运行的任务中,以检查实际任务最后一次执行的时间,然后在适当时分派它们
    • 这里的基本逻辑是:
      • if(time()>($task->lastRunTime+$task->intervalTime))分派(…)
      • if(time()>=$task->nextRunTime)分派(…)

根据您的申请,具体实施方式将有所不同;使用模型的好处在于,您可以轻松地根据应用程序的需要对其进行调整,例如跟踪指标。

您只能重新运行失败的作业。我指的是您调度的计划作业。不希望重新运行作业-只要有在下次环境备份时系统没有停止运行时应该和应该运行的作业就可以了。另外,这取决于您的查询条件,例如,将数据提取到计划任务的时间是今天的
>lastTaskDone
,如果是第二个任务的话条件是它会起作用。