当 Laravel 5 应用程序出现故障(计划维护或其他情况),但几分钟后又恢复时,Laravel 是否会自动知道 catch 并运行那些错过的任务?
如果没有,处理可能错过的任务的首选方法是什么?
最佳答案
任务调度系统似乎有点过于简单,无法确保任务在停机后运行(例如,如果它每天运行或在特定时间运行);正如所宣传的那样,它实际上只是按照给定的时间表运行任务。
本质上,停机/维护可能导致“错过公交车”。
确保关键任务运行:
- 添加一个模型/机制,用于存储关键任务上次运行时间的信息
- 不要直接从调度系统运行关键任务,而是将它们包装在频繁运行的任务中,以检查实际任务上次执行的时间,然后在适当的时候调度它们
- 这里的基本逻辑是:
if (time() > ($task->lastRunTime + $task->intervalTime))dispatch(...)
或;if (time() >= $task->nextRunTime) 调度(...)
- 这里的基本逻辑是:
根据您的应用程序,具体实现会有所不同;为此使用模型的好处是您可以轻松地将其适应应用程序的需求,例如跟踪指标。
关于php - 弥补维护/停机期间错过的 Laravel 任务的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46679351/