我们在upstart中有以下场景:
我们有一些名为 T 的任务,以及一些服务, 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 已在执行中,则会导致服务无法启动,而不是等待。
答案 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 成功完成。