ubuntu16.04.1, systemd
Une application dépend de mongodb. L'application et mongodb démarrent tous deux au démarrage en tant que services. app.service
contient la ligne suivante:
After=network.target mongod.service
Malheureusement, l'application échoue (avec une erreur de connexion à la base de données), je suppose, car le mongodb a besoin de temps pour démarrer et être prêt pour les connexions (si je démarre l'application plus tard, tout va bien).
On dirait Type=notify
(dans [Service]
section de mongod.service
) résoudra le problème si mongodb envoie une notification appropriée à systemd. Mais je n'ai trouvé aucune documentation à ce sujet.
Le queston est, comment démarrer automatiquement l'application, après que mongodb sera prêt pour les connexions entrantes.
Pour référence future, j'ai trouvé que cette solution fonctionnait: https://Gist.github.com/jwilm/5842956#gistcomment-2706797
De cette façon, mongodb se bloque jusqu'à ce que la base de données soit accessible avant que systemd ne démarre le service suivant.
Si vous avez des services qui dépendent de mongodb, la configuration est légèrement plus difficile car le service mongodb par défaut revient avant que la base de données ne soit en ligne. Cela peut amener des applications rapides à essayer de ne pas se connecter à la base de données. Pour éviter cela, ajoutez ce qui suit à
/etc/mongod.conf
:processManagement: fork: true
Ensuite, créez
/etc/systemd/system/mongod.service.d/mongod.conf
(qui étend l'existant/lib/systemd/system/mongod.service
) avec le contenu suivant:[Service] Type=oneshot RemainAfterExit=yes
Ça cause
Sudo systemctl start mongod
pour démarrer le serveur dans un processus fourchu et retourner uniquement APRÈS que la base de données est en place et prête pour les connexions. De cette façon, les services dépendants ne sont invoqués qu'une fois la base de données active.
Je suppose que la réponse à cette question est déjà à défaut de serveur. En bref: vous devriez peut-être utiliser Requires
au lieu de After
. Requires
signifie que votre service nécessite que l'autre fonctionne correctement, et non "devrait juste être démarré après".
https://serverfault.com/questions/812584/in-systemd-whats-the-difference-between-after-and-requires