web-dev-qa-db-fra.com

Dépendances de Systemd et ordre de démarrage

J'ai besoin de spécifier un ordre de démarrage pour que les processus démarrent. J'ai 389 Directory Server et Samba en cours d'exécution sur Fedora 18. Comment puis-je faire démarrer les services réseau, puis 389 DS, puis Samba? Existe-t-il une interface graphique pour gérer cela dans Fedora?

J'ai activé Samba pour commencer par systemctl enable smb.service. J'ai également activé 389 DS avec systemctl enable dirsrv.target.

20
Dylan Klomparens

Utilisation systemctl edit smb.service pour mettre à jour les dépendances.

After=dirsrv.target - S'assurera que le service smb.est démarré après dirsrv.target.

Pour la robustesse, (ce qui en vaut la peine si vous bricolez avec ce genre de choses), vous pouvez également souhaiter inclure certains des éléments suivants:

Requires=dirsrv.target - Activez dirsrv.target lorsque smb.service est activé. Entraînera l'échec de smb.service en cas d'échec de dirsrv.target.

Wants=dirsrv.target - Activez dirsrv.target lorsque smb.service est activé. N'entraînera pas l'échec de smb.service si dirsrv.target échoue.

BindsTo=dirsrv.target - Si dirsrv.target est désactivé, désactivez smb.service.

Source: http://www.freedesktop.org/software/systemd/man/systemd.unit.html

systemd-ui fournit une interface graphique pour systemd. Donne une bonne vue de l'état de systemd mais vous devrez toujours utiliser un éditeur de texte pour modifier les fichiers d'unité.

26
Guy Gangemi

Faites deux choses:

  1. Modifiez le /lib/systemd/system/smb.service fichier d'unité, pour spécifier la dépendance. Le [unit] la section contient un After= ligne qui spécifie quels services/cibles doivent être atteints avant celui-ci.

    After=syslog.target network.target nmb.service winbind.service
    

    Changez-le en:

    After=dirsrv.target syslog.target network.target nmb.service winbind.service
    
  2. Signaler cette dépendance à Fedora en tant que bogue , afin qu'il puisse être incorporé dans les futures versions.

10
Michael Hampton

Il existe deux alternatives pour modifier le fichier de service dans /usr/lib/systemd/system (voir Exemple 2. Remplacement des paramètres du fournisseur ):

  1. Copiez le fichier dans /etc/systemd/system et effectuez les modifications sur la copie. Ce fichier remplacera complètement le fichier dans /usr/lib.

  2. Créez le fichier /etc/systemd/system/smb.service.d/local.conf. Le contenu du fichier doit ressembler à l'exemple ci-dessous. Cela remplace de manière sélective les options "Requiert" et "Après" dans le fichier de service fourni par le fournisseur.

Chacun d'eux (y compris la modification du fichier dans /usr/lib) offre des avantages et des inconvénients. Le meilleur choix peut dépendre du service et de la nature des modifications.

Bien que cela puisse fonctionner, il ne suffit pas d'ajouter uniquement l'option "Après" (voir [Section] Options de la section ). "Après" contrôle l'ordre, mais pas les dépendances. Si dirsrv.target n'est pas démarré d'une autre manière, la spécification d'une commande ne la lancera pas. L'utilisation de l'option "Requiert" ou "Veut" forcera dirsrv.target à démarrer.

[Unit]
Requires=dirsrv.target
After=dirsrv.target

NB: Je ne sais pas si cette approche était disponible lorsque cette question a été posée à l'origine.

3
eye

vous devrez peut-être modifier ou inclure une ligne avec la directive Requires dans le [Unit] section du /usr/lib/systemd/system/smb.service fichier.

Requires=dirsrv.target

et

After=dirsrv.target
3
cturiel