De acuerdo con https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/, la forma recomendada de iniciar un servicio DESPUÉS de la conexión de redes es nivelar es usar " network-online.target " en el archivo .service :
"After=network-online.target"
"Wants=network-online.target"
Sin embargo, después de usar " network-online.target " y mi servicio fallaba porque la red no estaba completamente nivelada, descubrí que hay un error ( https://github.com/coreos/bugs/issues/1966 ) con él: no se garantiza que ser 100% infalible
De hecho, cuando se utilizan herramientas de configuración de redes dinámicas como " NetworkManager " como en este caso, el estado de las redes nunca puede ser 100% preciso o predecible. Aparentemente, desde el enlace que describe el error, " network-online.target " puede comportarse de manera inconsistente dependiendo de las diferentes aplicaciones con las que se utiliza.
Solución alternativa :
debe analizar el orden de inicio de los servicios y utilizar uno que comience más tarde que " network-online.target ":
systemd-analyze plot > /home/pi/graph.svg
Este es un proceso iterativo que cambia los objetivos de forma incremental a servicios posteriores y posteriores hasta que encuentre el que garantice que la red esté nivelada y su servicio se inicie sin errores. En mi propio caso, incluso tuve que poner sleep 10
en mi script el servicio SystemD llamado.
systemctl list-dependencies network-online.target
? Además, tenga en cuenta quenetwork-online.target
puede no necesariamente significar que hay acceso a Internet. Vea esta página para más información.network-online.target ● └─systemd-networkd-wait-online.service
ya he leído esa página, entiendo el concepto básico allí, pero aún así es muy extraño no tener un punto definido donde puedan comenzar los servicios críticos de la red. Al menos podría esperar la asignación adecuada de DHCP.network-online.target
depende solo delsystemd-networkd-wait-online.service
dicho de que está listo. No depende de que NetworkManager diga que está listo, ni compruebe queifup
todos los enlaces se hayan activado correctamente (si usa ese método para configurar su red). Ubuntu, por otro lado, depende deifup
NetworkManager, pero no parasystemd-networkd-wait-online.
./etc/network/interfaces
,.network
archivos systemd o NetworkManager?network-online.target
ynetwork.target
se activan justo despuésifup
. Yo uso debian default, así que/etc/network/interfaces
con la dirección dhcp. Parece que networkd podría ser una mejor solución, pero no es fácil de implementar.