如何在启动不同服务之前确保执行任务

时间:2013-09-10 13:05:46

标签: upstart

我们在upstart中有以下场景:

我们有一些名为 T 任务,以及一些服务 A B 符合以下要求:

  • T 必须与服务完全隔离 A B
  • 如果 T 任务已完成,则 A B 只能
  • A B 可以独立启动

简单来说, T A B 的必要条件,但是 T 运行 t必然意味着应该启动 A B

我们如何在upstart中强制执行这些要求?当然,添加其他“帮助”工作也没关系。


我们尝试了以下方法,但不起作用:

# T.conf
task
start on (starting A or starting B)

问题是如果 T 在启动 B 时已经在运行,例如因为 A 即将开始,然后 B 才会开始而不等待 T 完成。这违反了上述前两个要求。


另一种选择是从服务的预启动部分明确启动 T 。但是,如果 T 已在执行中,则会导致服务无法启动,而不是等待。

1 个答案:

答案 0 :(得分:1)

使用这个额外的帮助程序任务有一个解决方法(仍然欢迎更好的建议):

start on (starting A or starting B)
task
instance $JOB
script
    until start T; do sleep 1; done
end script

A B 即将启动时,此辅助作业即将启动,阻止这些服务。每项服务都有一个此任务实例。它会阻止,直到 T 成功完成。