2 votes

Définir une route statique à chaque démarrage avec launchd / plist échoue

J'espère utiliser launchd pour définir une route statique sur un serveur au démarrage, car je n'ai pas trouvé de meilleur moyen de configurer ce type de réseau sur un serveur.

Mon problème est que la commande semble s'exécuter avant que la pile réseau ne soit configurée. Je cherche donc des conseils pour modifier mon plist afin qu'il dépende en quelque sorte de la configuration du routage du système avant de s'exécuter.

Jan 16 14:39:45 server com.company.route.legacy_printer[149] : route : écriture dans la socket de routage : Le réseau est inaccessible

Jan 16 14:39:45 server com.company.route.legacy_printer[149] : add net 10.1.1.1 : gateway 10.0.1.2 : Le réseau est inaccessible

J'obtiens cette erreur après un redémarrage, mais le chargement de la même plist que Root une fois que le mac a démarré fonctionne très bien, donc j'espère qu'il s'agit d'une modification facile ou que quelqu'un me donne des indices sur une meilleure façon d'obtenir une route statique de manière fiable après chaque démarrage.

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

J'ai examiné les deux Exécuter une commande à chaque démarrage du Mac avec launchctl/plist y Comment puis-je lancer/arrêter/relancer une application automatiquement, au démarrage/à la connexion/à un autre moment ? pour arriver jusqu'ici, mais j'ai besoin d'un coup de pouce supplémentaire pour trouver la bonne dépendance afin d'obtenir le bon timing pour la commande route.

3voto

Oskar Points 1242

Un bref appel à scutil devrait aider à tester si le réseau est en place pour une interface spécifique sur IPv4, ce qui devrait suffire à déterminer quand vous pouvez ajouter une route IPv4. La commande suivante renverra un 0 si la première connexion Ethernet a une adresse IPv4 viable dans le délai par défaut de 15 secondes.

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

Vous pourriez plutôt appeler un script pour effectuer les tests et le routage - en utilisant éventuellement la commande -t pour ajuster le délai d'attente si nécessaire. Je ne connais pas de moyen de surcharger les arguments de launchd pour que tout soit contenu, mais il devrait être correct que launchd lance un script sur le système de fichiers local pour accomplir cette tâche. Faites attention si vous n'utilisez pas en0 pour votre IPv4 ou si vous souhaitez avoir un routage sur autre chose que l'interface réseau par défaut.

Ce script peut alors vérifier les erreurs, éventuellement vérifier d'autres interfaces ainsi que consigner les succès et les échecs à l'aide de la fonction logger commandement.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X