Essayer de comprendre ce qu'une cible systemd veut

J'essaie de mieux comprendre comment les unités cibles de systemd fonctionnent et je suis confus quant à ce que graphic.target "veut".

Si je lance ls -l dans /etc/systemd/system/graphical.target.wants je vois:

 total 0 lrwxrwxrwx 1 root root 43 Jul 19 16:50 accounts-daemon.service -> /lib/systemd/system/accounts-daemon.service 

Si je lance ls -l dans /lib/systemd/system/graphical.target.wants je vois:

 total 0 lrwxrwxrwx 1 root root 39 Jul 12 11:28 systemd-update-utmp-runlevel.service -> ../systemd-update-utmp-runlevel.service 

Le file /lib/systemd/system/graphical.target contient:

 [Unit] Description=Graphical Interface Documentation=man:systemd.special(7) Requires=multi-user.target Wants=display-manager.service Conflicts=rescue.service rescue.target After=multi-user.target rescue.service rescue.target display-manager.service AllowIsolate=yes 

Enfin, si systemctl show --property "Wants" graphical.target j'obtiens:

 Wants=hddtemp.service ureadahead.service speech-dispatcher.service systemd-update-utmp-runlevel.service grub-common.service ntp.service lxdm.service accounts-daemon.service ondemand.service 

Quelle source de "veut" en autorité?

Les dependencies effectives d'un file unitaire sont combinées à partir d'un certain nombre de sources. Pour graphical.target , ils sont:

  • Wants= déclarations dans le file graphical.target lui-même (notez que le file unité lui-même peut être placé dans divers directorys sous /lib , /run ou /etc , qui s'observent dans cet ordre);

  • Wants= déclarations dans les files dits "drop-in" dans $PREFIX/systemd/system/graphical.target.d/*.conf (où PREFIX est comme ci-dessus et les files drop-in également nommés);

  • des liens symboliques vers les unités voulues dans des directorys spéciaux dans $PREFIX/systemd/system/graphical.target.wants (encore une fois, PREFIX est comme ci-dessus).

Les dependencies de toutes ces sources sont simplement additionnées, plus il y a un certain nombre de dependencies implicites (lisez systemd.target (5) pour plus de détails).

Ainsi, pour voir les dependencies efficaces, il est préférable d'utiliser la command systemctl show-property -p Wants . Malheureusement, il n'y a aucun moyen de voir quelles dependencies proviennent de quels endroits – vous devrez vérifier cela manuellement si vous voulez en supprimer un.