La respuesta de James funciona para una dependencia 1 a 1. Para un 1 a muchos, es decir, para asegurarse de que el servicio A comience antes que los servicios B, C y D, debe adoptar otro enfoque. Puede consultar los scripts de portmap actuales como referencia, pero este es el enfoque general: cree un script de espera.
Escenario: desea que su Servicio A se ejecute siempre antes del servicio-b, el servicio-c y el servicio-d.
Solución: cree un script de espera para el Servicio A. Llámelo "/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
Lo que esto significa en inglés simple es: cuando el servicio b, c o d indica que desean comenzar, deben esperar para comenzar hasta que se ejecute el servicio a. El trabajo service-a-wait está diseñado para ejecutarse hasta que service-a haya comenzado. Una vez que finaliza el servicio de espera, ahora los servicios b, cyd son libres de continuar y ejecutarse.
Esto asegurará que el servicio-a esté en funcionamiento antes de que cualquiera de sus dependencias inversas intente iniciarse.
Nota: la línea "instancia $ TRABAJO" es importante en este escenario "comenzar en ... o ... o ...". De lo contrario, solo bloqueará lo que B, C o D dispare primero.
(La instanciación merece una mejor explicación honestamente. Por ahora, solo hazlo.;)