J'ai écrit quelques fichiers de service utilisateur systemd que je souhaite que les utilisateurs activent et qui nécessitent une connexion réseau fonctionnelle. J'ai pensé que ce serait aussi simple que:
Wants=network-online.target
After=network-online.target
Cependant, les services semblent commencer trop tôt, et journalctl
je vois:
network-online.target: Cannot add dependency job, ignoring: Unit network-online.target failed to load: No such file or directory.
Ensuite, j'ai cherché plus et essayé
Wants=network.target
After=network.target
et l'a fait sudo systemctl enable systemd-networkd-wait-online.service
.
Maintenant, j'ai journalctl
:
network.target: Cannot add dependency job, ignoring: Unit network.target failed to load: No such file or directory.
Et encore une fois, le service commence trop tôt.
Ce message est-il censé être là? Comment puis-je déboguer mon problème?
EDIT : la raison est simple et spécifiquement indiquée dans l' Arch Wiki :
systemd --user
s'exécute en tant que processus distinct dusystemd --system
processus. Les unités utilisateur ne peuvent pas référencer ou dépendre des unités système.
Ce message de forum semble suggérer une solution simple: je devrais link
l'unité système nécessaire en tant qu'utilisateur, créant ainsi un lien symbolique vers celui-ci disponible sur le chemin de recherche de l'unité.
Après cela, je ne vois aucun No such file or directory
message, cependant, je ne peux toujours pas faire fonctionner les services une fois le réseau en ligne. J'ai essayé liaison network.target
, network-online.target
et systemd-networkd-wait-online.service
, la mise en mes unités à dépendre de chacun d'eux, sans succès. Lorsque je vérifie l'état de l'unité liée en mode utilisateur, ils sont tous certains morts, par exemple:
$ systemctl --user status network.target
● network.target - Network
Loaded: loaded (/usr/lib/systemd/system/network.target; linked; vendor preset: enabled)
Active: inactive (dead)
Docs: man:systemd.special(7)
http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget
$ systemctl status network.target
● network.target - Network
Loaded: loaded (/usr/lib/systemd/system/network.target; static; vendor preset: disabled)
Active: active since Sat 2015-07-18 19:20:11 MSK; 3h 35min ago
Docs: man:systemd.special(7)
http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget
Jul 18 19:20:11 calc-server systemd[1]: Reached target Network.
Jul 18 19:20:11 calc-server systemd[1]: Starting Network.
Cependant, je peux voir network-online.target
actif en mode utilisateur après l'avoir lié:
$ systemctl --user status network-online.target
● network-online.target - Network is Online
Loaded: loaded (/usr/lib/systemd/system/network-online.target; linked; vendor preset: enabled)
Active: active since Sun 2015-07-19 00:35:38 MSK; 2min 48s ago
Docs: man:systemd.special(7)
http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget
Jul 19 00:35:38 calc-server systemd[469]: Reached target Network is Online.
Jul 19 00:35:38 calc-server systemd[469]: Starting Network is Online.