Jawaban James bekerja untuk ketergantungan 1 banding 1. Untuk 1 hingga banyak, yaitu untuk memastikan layanan A dimulai sebelum layanan B, C, dan D, Anda perlu mengambil pendekatan lain. Anda dapat melihat skrip portmap saat ini untuk referensi tetapi di sini adalah pendekatan umum: buat skrip tunggu.
Skenario: Anda ingin agar Layanan A Anda selalu berjalan sebelum service-b, service-c, dan service-d.
Solusi: buat skrip tunggu untuk Layanan A. Sebut saja "/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
Apa artinya ini dalam bahasa Inggris biasa adalah: ketika layanan b, c, atau d memberi tanda bahwa mereka ingin memulai, mereka harus menunggu untuk memulai sampai service-a berjalan. Pekerjaan service-a-wait dirancang untuk berjalan sampai service-a telah dimulai. Setelah layanan-a-tunggu keluar, sekarang layanan b, c, dan d bebas untuk melanjutkan dan menjalankan.
Ini akan memastikan service-a aktif dan berjalan sebelum salah satu dari dependensi kebalikannya mencoba untuk memulai.
Catatan: baris "instance $ JOB" penting dalam skenario "mulai dari ... atau .. atau .." ini. Kalau tidak, Anda hanya akan benar-benar memblokir B, C, atau D mana yang dimatikan terlebih dahulu.
(Instansiasi layak mendapat penjelasan yang lebih baik secara jujur. Untuk saat ini, lakukan saja.;)