Fondo
Estoy escribiendo un script simple para ejecutar en Raspbain en Raspberry Pi 2, simplemente enciendo un LED para indicar que estoy listo para conectarme con SSH desde mi computadora de escritorio.
El script no es importante aquí, solo mencionar que como uso el control de frecuencia, el script ejecuta un bucle infinito, para encender y apagar el LED con frecuencia. Este es un ejemplo de servicio simple. Sin embargo, al menosla respuesta aceptada de esta preguntaAconséjeme que establezca el tipo en inactivo. Entonces mi archivo de servicio se ve así
[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
Efecto
El servicio funciona como se esperaba. Sin embargo, noté que cuando inicio PuTTY en mi computadora de escritorio justo después de que se enciende el LED, el mensaje de inicio de sesión no aparece de inmediato. Entonces lo verifiqué con
$ systemd-analyze plot > output.svg
El resultado muestra
Pregunta
Parece que mis servicios no comienzan después de network-online.target
, ¿qué está mal aquí y cómo puedo solucionarlo?
Respuesta1
Cuando hay una pregunta sobre una directiva systemd, puede usarla man systemd.directives
para buscar dónde está documentada. En este caso se nota que After=
está documentado en man systemd.unit
.
En ese archivo, muestra que la After=
directiva aparece en las "OPCIONES DE SECCIÓN [UNIDAD]", indicando que pertenece a la [Unit]
sección del archivo.
La misma documentación también documenta las opciones de la sección [INSTALAR] y After=
no figura allí.
En resumen, su After=
directiva estaba en la ubicación incorrecta del archivo de la unidad, por lo que no tuvo ningún efecto hasta que lo movió a la ubicación correcta.
Respuesta2
Arréglelo modificando el servicio como
[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
Todavía no entiendo completamente lo que estaba haciendo, pero ahora funciona. ¿Alguien puede explicarlo?
Actualizar
Esta respuesta fue creada por mí mismo antes de que llegue la respuesta aceptada.