Estoy tratando de crear un servicio systemd en Debian Jessie. Lo necesito para comenzar después de que network-online.targetse alcanza.
El problema son los network-online.targetincendios al mismo tiempo network.targety en ese momento mis interfaces no están configuradas todavía, solo comencé la consulta DHCP.
Parece que este problema es específico de Debian porque usa la configuración de red heredada.
¿Cómo evitar este problema o cómo hacer que network-online.targetfuncione?
debian
systemd
systemd-networkd
10robinho
fuente
fuente

systemctl list-dependencies network-online.target? Además, tenga en cuenta quenetwork-online.targetpuede no necesariamente significar que hay acceso a Internet. Vea esta página para más información.network-online.target ● └─systemd-networkd-wait-online.serviceya 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.targetdepende solo delsystemd-networkd-wait-online.servicedicho de que está listo. No depende de que NetworkManager diga que está listo, ni compruebe queifuptodos los enlaces se hayan activado correctamente (si usa ese método para configurar su red). Ubuntu, por otro lado, depende deifupNetworkManager, pero no parasystemd-networkd-wait-online../etc/network/interfaces,.networkarchivos systemd o NetworkManager?network-online.targetynetwork.targetse activan justo despuésifup. Yo uso debian default, así que/etc/network/interfacescon la dirección dhcp. Parece que networkd podría ser una mejor solución, pero no es fácil de implementar.Respuestas:
Como está utilizando
/etc/network/interfaces, necesitará un servicio systemd para monitorear el estado de cada interfaz. Verifique si tiene/lib/systemd/system/ifup-wait-all-auto.service(instalado por elifupdownpaquete en Ubuntu 15.04). Si no, cree/etc/systemd/system/ifup-wait-all-auto.servicey pegue lo siguiente:Este es el archivo de servicio presente en un sistema Ubuntu 15.04, pero con la
[Install]sección agregada para facilitar un poco las cosas. Espero que el comportamiento deifupUbuntu 15.04 sea el mismo que el deifupDebian Jessie. De lo contrario, será necesaria alguna modificación (particularmente con la última línea).Entonces, corre
sudo systemctl enable ifup-wait-all-auto.service. Después de reiniciar su computadora, debería ver quenetwork-online.targetse alcanza después de abrir las interfaces (al menos).fuente
ExecStart = /bin/bash -c 'while [ -z "$(hostname -I)" ]; do sleep 1; done;'. Dependehostnamede verificar si se ha asignado la dirección IP.ifup-wait-all-auto.servicese ha descartado en laifupdownversión0.8.5ubuntu1: "Descartar ifup-wait-all-auto.service. Esto se ha implementado de manera más elegante haciendo¡Atención! Lo descubrí en un Raspbian Jessie: elimina TODAS las líneas comentadas en / etc / interfaces de red y ¡funcionará! Parece ser un error de análisis =) En mi caso específico, lo dejé comentado
iface eth0 inet dhcpy lo olvidé hace eones, pero después de actualizar a Raspbian Jessie y reconstruir un núcleo, tuve un comportamiento muy extraño: usé DHCP y me negué a hacerlo. realice un ajuste desde / etc / network / interfaces. Así que lo eliminé de cualquier comentario, solo líneas de trabajo, reinicio, ¡y funciona! NO SE NECESITA PATCHING / EDICIÓN DE SCRIPT!fuente
/etc/network/interfacesarchivo; se activará si todavía está allí.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 :
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 ":
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 10en mi script el servicio SystemD llamado.fuente
Una vez encontré una respuesta en Github que la resolvió intentando continuamente hacer ping a un servidor. Solo cuando llega el ping, el servicio continúa:
Lo reemplacé
google.comcon mi propio servidor porque mi script principal necesitaba conectarse a mi servidor.fuente