2 votos

Establecer una ruta estática en cada arranque con launchd / plist está fallando

Espero utilizar launchd para establecer una ruta estática en un servidor en el momento del arranque, ya que no he encontrado una mejor manera de configurar este tipo de red en un servidor.

Mi problema es que el comando parece ejecutarse antes de que se configure la pila de red, así que estoy buscando consejo sobre cómo cambiar mi plist para que de alguna manera dependa de que el enrutamiento del sistema esté configurado antes de que se ejecute.

Jan 16 14:39:45 server com.company.route.legacy_printer[149]: route: writing to routing socket: La red es inalcanzable

Jan 16 14:39:45 server com.company.route.legacy_printer[149]: add net 10.1.1.1: gateway 10.0.1.2: La red es inalcanzable

Me sale este error después de un reinicio, pero cargar el mismo plist como Root una vez que el mac ha arrancado funciona bien, así que espero que sea un ajuste fácil o que alguien me dé pistas sobre una mejor manera de obtener una ruta estática de forma fiable después de cada arranque.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.company.route.legacy_printer</string>
    <key>ProgramArguments</key>
    <array>
        <string>/sbin/route</string>
        <string>-n</string>
        <string>add</string>
        <string>-net</string>
        <string>10.1.1.1</string>
        <string>10.0.1.2</string>
        <string>255.255.255.0</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <false/>
    <key>AbandonProcessGroup</key>
    <true/>
</dict>
</plist>

He revisado ambos Ejecutar un comando cada vez que el Mac arranca con launchctl/plist y ¿Cómo puedo ejecutar/detener/reiniciar una aplicación automáticamente, en el arranque/inicio de sesión/en algún otro momento? para llegar hasta aquí, pero necesito un empujón extra para encontrar la dependencia correcta para conseguir el tiempo adecuado para el comando de ruta.

3voto

Oskar Puntos 1242

Una breve llamada a scutil debería ayudar a comprobar si la red está activa para una interfaz específica en IPv4, lo que debería bastar para determinar cuándo se puede añadir una ruta IPv4. El siguiente comando devolverá un 0 si la primera conexión ethernet tiene una dirección IPv4 viable dentro del periodo de tiempo de espera por defecto de 15 segundos.

  • /usr/sbin/scutil -w State:/Network/Interface/en0/IPv4

En su lugar, podría llamar a un script para hacer las pruebas y el enrutamiento - tal vez utilizando el comando -t para ajustar el tiempo de espera si es necesario. No conozco una forma de sobrecargar los argumentos de launchd para que todo esté contenido, pero debería estar bien hacer que launchd lance un script en el sistema de archivos local para realizar esta tarea. Tenga cuidado si no está usando en0 para su IPv4 o desea tener enrutamiento en otra interfaz de red que no sea la predeterminada.

Ese script puede entonces comprobar los errores, tal vez comprobar otras interfaces, así como registrar el éxito y el fracaso utilizando el logger comando.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X