web-dev-qa-db-fra.com

Systemd: démarrer le service après un service spécifique

Question générale: Comment peut-on démarrer un systemd .service Après le démarrage d'un .service Particulier?

Question spécifique: Comment démarrer website.service Uniquement après le lancement de mongodb.service? En d'autres termes, website.service Devrait dépendre de mongodb.service.

66
user2312578

Dans le fichier .service sous la section [Unit]:

[Unit]
Description=My Website
After=syslog.target network.target mongodb.service

La partie importante est le mongodb.service

La page de manuel le décrit cependant, à cause du formatage, ce n'est pas aussi clair à première vue

systemd.unit - bien formaté

systemd.unit - pas si bien formaté

88
user2312578

La dépendance After= N’est effective que si un service comprenant After= Et un service inclus par After= Sont tous deux planifiés pour démarrer dans le cadre de votre démarrage.

Ex:

a.service
[Unit]
After=b.service

De cette manière, si a.service Et b.service Sont activés , alors systemd commandera b.service Après a.service.

Si je ne me trompe pas, ce que vous demandez, c'est comment démarrer b.service Lorsque a.service Démarre même si b.service N'est pas activé.

La directive pour cela est Wants= Ou Requires= Sous [Unit].

website.service
[Unit]
Wants=mongodb.service
After=mongodb.service

La différence entre Wants= Et Requires= Est qu'avec Requires=, Un échec de démarrage de b.service Entraînera l'échec du démarrage de a.service, alors qu'avec Wants=, a.service démarrera même si b.service échoue. Ceci est expliqué en détail dans la page de manuel de .unit .

38
Umut