คำตอบของ James ทำงานได้สำหรับการพึ่งพา 1 ต่อ 1 สำหรับ 1 ถึงมากคือเพื่อให้แน่ใจว่าบริการ A เริ่มก่อนบริการ B, C และ D คุณต้องใช้แนวทางอื่น คุณสามารถดูสคริปต์ portmap ปัจจุบันสำหรับการอ้างอิง แต่นี่คือวิธีการทั่วไป: สร้างสคริปต์รอ
สถานการณ์: คุณต้องการบริการของคุณ A จะเสมอทำงานก่อนบริการข, บริการ-C และบริการ-D
การแก้ไข: สร้างสคริปต์การรอสำหรับบริการ A. เรียกมันว่า "/etc/init/service-a-wait.conf"
# service-a-wait
start on (starting service-b
or starting service-c
or starting service-d)
stop on (started service-a or stopped service-a)
# We know that we have more than one job that needs to wait for service-a and
# will make use of this service, so we need to instantiate.
instance $JOB
# Needed to make starting the job successful despite being killed
normal exit 2
task
script
status service-a | grep -q "start/running" && exit 0
start service-a || true
# Waiting forever is ok.. upstart will kill this job when
# the service-a we tried to start above either starts or stops
while sleep 3600 ; do :; done
end script
สิ่งนี้หมายความว่าในภาษาอังกฤษธรรมดา: เมื่อสัญญาณบริการ b, c หรือ d ที่พวกเขาต้องการที่จะเริ่มพวกเขาต้องรอที่จะเริ่มจนกว่า service-a กำลังทำงานอยู่ งาน service-a-wait ถูกออกแบบมาให้ทำงานจนกว่า service-a ได้เริ่มต้นแล้ว เมื่อออกจากบริการแล้วรอตอนนี้บริการ b, c และ d มีอิสระที่จะดำเนินการต่อและทำงานได้
สิ่งนี้จะช่วยให้มั่นใจได้ว่าการให้บริการ a นั้นใช้งานได้และก่อนที่ความพยายามด้านการย้อนกลับใด ๆ ของมันจะเริ่มขึ้น
หมายเหตุ: บรรทัด "JOB $ JOB" มีความสำคัญในสถานการณ์ "เริ่มต้นใน ... หรือ .. หรือ .. " ไม่เช่นนั้นคุณจะบล็อกเฉพาะว่า B, C หรือ D ใดจะทำการดับก่อน
(การสร้างอินสแตนซ์สมควรได้รับการอธิบายที่ดีกว่าโดยสุจริตสำหรับตอนนี้เพียงแค่ทำมัน.)