0

我需要运行一个 CronJob,它以 CronJob 配置中提到的特定间隔执行三个相互依赖的异步任务。

异步任务 1:查询表以获取特定条件的结果

异步任务 2:对任务 1 中获取的结果执行异步操作

异步任务 3:使用任务 2 中执行的操作更新相应 Id 的表条目。

我无法弄清楚,如果下一个 CronJob 的下一个间隔在第一个间隔的任务结束之前开始会发生什么。以及如何管理。

更具体的问题:有没有一种方法可以在 sql 表和正在执行的任务之间保持同步,这样如果UPDATE TASK一个循环中未决,它在下一个循环中不会执行相同的任务。

我正在使用node-cronnpm 模块来开发 CronJob。

4

1 回答 1

2

不幸的是,cron不支持作业之间的依赖关系,因此您必须自己处理。你基本上有两个选择:

  • 将任务合并为一个
  • 在某处有一个标志,让 Task-n 知道 Task-n-1 是否已成功完成

如果您能够合并任务,您的生活将会简单得多,因为您可以使用您在 JavaScript 中习惯使用的工具。如果没有,您可以执行以下操作:

  • Async Task-1 查询数据库并将结果保存到已知位置(例如2018-08-31-task-1-results.csv
  • Async Task-2 检查是否2018-08-31-task-1-results.csv存在。如果是,它知道上一个任务是成功的,并且可以处理文件并将输出保存到另一个文件(例如2018-08-31-task-2-results.csv
  • Async Task-3 的执行过程与 Async Task-2 类似。

换句话说,这些任务并不直接相互依赖,而是依赖于先前任务生成的输出。这允许您重新运行任务并记录其输出。我的示例是使用文件,但它可以是所有任务都可以访问的任何内容,例如中间表。

将来,如果您必须继续手写这些依赖链,我建议您考虑使用LuigiAirflow等众多任务管道框架之一。

于 2018-08-31T11:44:29.587 回答