【发布时间】:2014-08-30 19:58:40
【问题描述】:
我需要一个包含多个任务的作业,在不同的机器上运行,一个接一个(不是同时),当当前作业正在运行时,另一个相同的作业可以到达队列,但不应该启动,直到上一个已经完成。所以我想出了这个“解决方案”,它可能不是最好的,但它可以完成工作:)。我只有一个问题。
我发现我需要一个具有以下结构的 JobQueue(MongoDb 或 Redis):
{
hostname: 'host where to execute the task',
running:FALSE,
task: 'current task number',
tasks:{
[task_id:1, commands:'run these ecommands', hostname:'aaa'],
[task_id:2,commands:'another command', hostname:'bbb']
}
}
主持人:
- 搜索具有相同主机名的作业,并运行==FALSE
- 执行在该作业中设置的任务
- 完成后,主机设置 running=FALSE,检查是否还有其他任务要执行并增加任务编号 + 将主机名设置为下一个任务的下一台计算机
因为作业可以累积,想象一下作业排队等待一台主机的情况:A,B,A
由于我必须运行指定机器的所有作业,我如何不启动第 3 个 A(第一个 A 仍在运行)?
【问题讨论】:
-
为什么不为每种消息类型设置单独的队列?
-
消息类型是什么意思?主机名,任务?
-
它们不都一样吗?从帖子中我了解到您有多个任务,每个任务都在不同的机器上运行,期望有自己的消息类型......
-
每个任务都在不同的机器上运行,但一次只能运行一个。所以任务 1 用于机器 A 任务 2 仅在机器 A 完成任务后用于机器 B
标签: ruby mongodb redis scheduled-tasks