L'impostazione di un percorso statico ogni avvio con launchd / plist non riesce

2

Spero di utilizzare launchd per impostare una route statica su un server al momento dell'avvio poiché non ho trovato un modo migliore per configurare questo tipo di networking su un server.

Il mio problema è che il comando sembra essere in esecuzione prima che lo stack di rete sia impostato, quindi sto cercando un consiglio su come modificare il mio plist in qualche modo dipende dal routing del sistema che viene impostato prima dell'esecuzione.

Jan 16 14:39:45 server com.company.route.legacy_printer[149]: route: writing to routing socket: Network is unreachable

Jan 16 14:39:45 server com.company.route.legacy_printer[149]: add net 10.1.1.1: gateway 10.0.1.2: Network is unreachable

Ricevo questo errore dopo un riavvio, ma il caricamento dello stesso plist come root una volta che il Mac è stato avviato funziona perfettamente, quindi spero che sia un aggiustamento facile o qualcuno mi indichi un modo migliore per ottenere una route statica in modo affidabile dopo ogni avvio.

<?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>

Ho esaminato entrambi Eseguendo un comando ogni volta che Mac si avvia con launchctl / plist e Come posso eseguire / fermare / riavviare un'applicazione automaticamente, all'avvio / login / qualche altra volta? per arrivare a questo punto, ma è necessario un ulteriore spunto per trovare la corretta dipendenza per ottenere i tempi giusti per il comando route.

    
posta bmike 16.01.2012 - 22:07
fonte

1 risposta

3

Una breve chiamata a scutil dovrebbe aiuta a verificare se la rete è attiva per un'interfaccia specifica su IPv4, che dovrebbe essere sufficiente per determinare quando è possibile aggiungere una route IPv4. Il seguente comando restituirà uno 0 se la prima connessione ethernet ha un indirizzo IPv4 valido entro il periodo di timeout predefinito di 15 secondi.

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

Potresti invece chiamare uno script per eseguire test e routing, magari usando il comando -t per regolare il timeout se necessario. Non conosco un modo per sovraccaricare gli argomenti di launchd per avere tutto contenuto, ma dovrebbe andare bene avviare launch su uno script sul filesystem locale per eseguire questa operazione. Prestare attenzione se non si sta utilizzando en0 per IPv4 o se si desidera avere routing su un'altra interfaccia di rete predefinita.

Lo script può quindi verificare la presenza di errori, magari controllare altre interfacce e registrare il successo e l'errore utilizzando il comando logger .

    
risposta data 13.02.2012 - 21:31
fonte

Leggi altre domande sui tag