La réponse de James fonctionne pour une dépendance de 1 à 1. Pour un 1 sur plusieurs, c'est-à-dire pour vous assurer que le service A commence avant les services B, C et D, vous devez adopter une autre approche. Vous pouvez consulter les scripts portmap actuels pour référence, mais voici l’approche générale: créer un script d’attente.
Scénario: vous voulez que votre service A soit toujours exécuté avant service-b, service-c et service-d.
Solution: créez un script d'attente pour le service A. Appelez-le "/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
En clair, cela signifie: lorsque le service b, c ou d indique qu’il souhaite démarrer, il doit attendre que le service-a soit exécuté. Le travail service-a-wait est conçu pour s'exécuter jusqu'à ce que le service-a ait démarré. Une fois que service-a-wait est terminé, les services b, c et d sont désormais libres de fonctionner.
Cela garantira que le service-a est opérationnel avant toute tentative de démarrage de ses dépendances inverses.
Remarque: la ligne "instance $ JOB" est importante dans ce scénario "démarrer le ... ou .. ou ..". Autrement, vous ne bloquerez que pour n'importe lequel des groupes B, C ou D qui se déclenche en premier.
(L’instanciation mérite honnêtement une meilleure explication. Pour le moment, faites-le.;)