php - 弥补维护/停机期间错过的 Laravel 任务的正确方法是什么?

标签 php laravel laravel-5 task

当 Laravel 5 应用程序出现故障(计划维护或其他情况),但几分钟后又恢复时,Laravel 是否会自动知道 catch 并运行那些错过的任务?

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

最佳答案

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

本质上,停机/维护可能导致“错过公交车”。

确保关键任务运行:

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

根据您的应用程序,具体实现会有所不同;为此使用模型的好处是您可以轻松地将其适应应用程序的需求,例如跟踪指标。

关于php - 弥补维护/停机期间错过的 Laravel 任务的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46679351/

相关文章:

php - 拉维尔 4 : How to get selected/specific columns in a many to many relationship?

mysql - Laravel Eloquent 每隔 N 行跳过一次

javascript - 使用 jQuery 和 Laravel 框架发布请求

php - Laravel 5 InvalidArgumentException 在 FileViewFinder.php 第 137 行 : View [. admin] 未找到

javascript - 如何用JS代码加载php文件

php - 简单的开/关餐厅开关

javascript - 通过Ajax成功将数据插入mysql后无法重定向

php - 来自动态数组输入的 Laravel 多个 orderBy

mysql - 为什么 Laravel 闭包中 undefined variable ?

php - Laravel 4 一个接口(interface)同时具有多个实现