La configuración de una ruta estática cada arranque con launchd / plist está fallando

2

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 redes en un servidor.

Mi problema es que el comando parece estar ejecutándose antes de configurar la pila de red, por lo que estoy buscando consejos sobre cómo cambiar mi lista para depender de alguna manera de la configuración del enrutamiento del sistema antes de que se ejecute.

  

16 de enero 14:39:45 servidor com.company.route.legacy_printer [149]: ruta: escritura al enrutador socket: la red es inalcanzable

     

16 de enero 14:39:45 servidor com.company.route.legacy_printer [149]: add net 10.1.1.1: gateway 10.0.1.2: la red es inalcanzable

Recibo 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 una modificación fácil o que alguien me esté indicando una mejor manera de obtener una ruta estática de manera confiable 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 tanto Ejecutando un comando cada vez que Mac arranca con launchctl / plist y ¿Cómo puedo ejecutar / detener / reiniciar una aplicación automáticamente, en boot / login / algún otro momento? para llegar hasta aquí, pero necesito un empujón adicional para encontrar la correcta dependencia para obtener el tiempo correcto para el comando de ruta.

    
pregunta bmike 16.01.2012 - 22:07

1 respuesta

3

Una llamada corta a scutil debería ayuda para probar si la red está configurada para una interfaz específica en IPv4, lo cual debería ser suficiente para determinar cuándo se puede agregar una ruta IPv4. El siguiente comando devolverá un 0 si la primera conexión Ethernet tiene una dirección IPv4 viable dentro del período de espera predeterminado de 15 segundos.

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

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

Esa secuencia de comandos puede verificar si hay errores, tal vez verificar otras interfaces, así como registrar el éxito y el fracaso mediante el comando logger .

    
respondido por el bmike 13.02.2012 - 21:31

Lea otras preguntas en las etiquetas