Odpowiedź Jamesa działa w zależności od 1 do 1. Dla 1 do wielu, tj. Aby upewnić się, że usługa A rozpocznie się przed usługami B, C i D, musisz zastosować inne podejście. Możesz spojrzeć na bieżące skrypty portmap w celach informacyjnych, ale oto ogólne podejście: utwórz skrypt oczekiwania.
Scenariusz: chcesz, aby usługa A zawsze działała przed usługą b, usługą c i usługą d.
Rozwiązanie: utwórz skrypt oczekiwania dla usługi A. Nazwij go „/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
W zwykłym języku angielskim oznacza to: gdy usługa b, c lub d sygnalizuje, że chce uruchomić, musi poczekać, aż uruchomi się usługa a. Zadanie usługi czekania zostało zaprojektowane do uruchomienia do momentu uruchomienia usługi a. Po zakończeniu usługi Service-a-wait usługi b, c i d mogą nadal działać i działać.
Zapewni to, że usługa a jest uruchomiona przed próbą uruchomienia którejkolwiek z jej odwrotnych zależności.
Uwaga: wiersz „instancja $ JOB” jest ważny w tym scenariuszu „zacznij od ... lub… lub…”. W przeciwnym razie tak naprawdę zablokujesz tylko dla tego, który B, C lub D wystrzeli jako pierwszy.
(tworzenie instancji zasługuje na lepsze wyjaśnienie szczerze. na razie po prostu zrób to;)