Systemd: comment démarrer un service systemd après une connexion complète au réseau?


12

Contexte

J'écris un script simple à exécuter dans Raspbain sur Raspberry Pi 2, allumez simplement une LED pour indiquer que je suis prêt à me connecter avec SSH à partir de mon ordinateur de bureau.

Le script n'est pas important ici, seulement pour mentionner que lorsque j'utilise le contrôle de fréquence, le script exécute une boucle infinie, pour allumer et éteindre fréquemment la LED. C'est donc un exemple de service simple. Cependant, au moins la réponse acceptée à cette question me conseille de définir le type sur inactif. Donc mon fichier de service ressemble

[Unit]
Description=Turn on LED after SSH is ready

[Service]
Type=idle
ExecStart=/usr/bin/sshready.py

[Install]
Wants=network-online.target
After=network-online.target

Effet

Le service fonctionne comme prévu. Cependant, j'ai remarqué que lorsque je démarre du mastic sur mon ordinateur de bureau juste après que le voyant s'allume, l'invite de connexion n'apparaît pas immédiatement. J'ai donc vérifié avec

$ systemd-analyze plot > output.svg

Le résultat montre

entrez la description de l'image ici

Question

Il semble que mes services ne commencent pas après network-online.target, qu'est-ce qui ne va pas ici et comment puis-je le réparer?

Réponses:


12

Lorsqu'il y a une question sur une directive systemd, vous pouvez utiliser man systemd.directivespour trouver où elle est documentée. Dans ce cas, cela montre que cela After=est documenté dans man systemd.unit.

Dans ce fichier, il indique que la After=directive est répertoriée dans les "OPTIONS DE SECTION [UNIT]", indiquant qu'elle appartient à la [Unit]section du fichier.

La même documentation documente également les options de la section [INSTALL] et After=n'y figure pas.

En bref, votre After=directive se trouvait au mauvais emplacement du fichier d'unité, elle n'a donc eu aucun effet tant que vous ne l'avez pas déplacée au bon emplacement.


Pour être clair, dans ce cas, "[Unit]" est "[Service]", car il s'agit d'un fichier de service.
faho

Une copie collable avec les corrections aurait été bien mieux!
GerardJP

@GerardJP Mieux vaut apprendre à un homme à pêcher que de le nourrir pendant une journée. Une fois que les gens savent comment utiliser la documentation systemd, ils peuvent trouver des réponses faisant autorité sans passer de temps sur StackExchange à regarder des documents tiers.
Mark Stosberg

11

Faites-le réparer en modifiant le service comme

[Unit]
Description=Turn on LED after SSH is ready
After=network-online.target

[Service]
Type=idle
ExecStart=/usr/bin/sshready.py

[Install]
WantedBy=network-online.target

Je ne comprenais toujours pas complètement ce que je faisais, mais cela fonctionne maintenant. Quelqu'un peut-il expliquer?

Mise à jour

Cette réponse a été créée par moi-même avant la réponse acceptée.


Que la After=directive doit être dans la [Unit]section. C'est juste ça.
Bigon
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.