Ответ Джеймса работает от 1 до 1 зависимости. Для от 1 до многих, то есть чтобы убедиться, что служба A запускается перед службами B, C и D, вам нужно использовать другой подход. Вы можете посмотреть текущие сценарии portmap для справки, но вот общий подход: создать сценарий ожидания.
Сценарий: вы хотите, чтобы ваша служба A всегда запускалась до службы-b, службы-c и службы -d.
# 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, которые они хотят запустить, они должны ждать, пока не запустится служба-a. Запуск службы-ожидания предназначен для запуска до тех пор, пока не начнется сервис-а. После завершения обслуживания-ожидания, теперь службы b, c и d могут свободно выполняться и выполняться.
Это заверит, что служба-a запущена и запущена до того, как попытается запустить любую из своих обратных зависимостей .
Примечание: строка «экземпляр $ JOB» важна в этом сценарии «начать ... ... или ..». В противном случае вы действительно блокируете только то, что из B, C или D срабатывает сперва.
(экземпляр заслуживает лучшего объяснения честно, а теперь просто сделайте это.;)