19 votes

Exécuter script dans OS X 10.6 sur connexion réseau. (comme /etc/network/if-up.d/)

Existe-t-il un moyen d'exécuter un script lorsqu'une interface réseau se présente sous Mac OS X ?

J'ai essayé de mettre un script nommé ip-up dans /etc/ppp mais il ne semble pas se déclencher lorsque je me déconnecte et me reconnecte à un réseau sans fil.

Je préférerais ne pas avoir à exécuter une tâche cron pour vérifier constamment si l'état du réseau a changé. Dans certaines distributions linux, vous pouvez y parvenir en plaçant un script dans /etc/network/if-up.d/ . Existe-t-il quelque chose de similaire pour Mac OS X ?

20voto

ipek Points 141

A launchd l'agent surveille /etc/resolv.conf et deux fichiers .plist relatifs au réseau sous /Library/Preferences/SystemConfiguration/ semble fonctionner pour moi (sous Mac OS X 10.8.4) :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" \
  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>ifup.ddns</string>

  <key>LowPriorityIO</key>
  <true/>

  <key>ProgramArguments</key>
  <array>
    <string>/Users/Shared/bin/ddns-update.sh</string>
  </array>

  <key>WatchPaths</key>
  <array>
    <string>/etc/resolv.conf</string>
    <string>/Library/Preferences/SystemConfiguration/NetworkInterfaces.plist</string>
    <string>/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist</string>
  </array>

  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

Auparavant, je n'avais utilisé que /etc/resolv.conf mais dans certains cas, cela n'a pas suffi.

5voto

Daniel Beck Points 105590

Vous pouvez essayer MarcoPolo ou l'un des services publics similaires répertoriés sur son site web. Changeur de lieu semble prometteur si vous êtes minimaliste.

5voto

scaganoff Points 1404

Vous devriez envisager d'utiliser crankd qui permet précisément d'exécuter des scripts en réponse à de nombreux événements système tels que les changements de réseau, l'activité du système de fichiers, le lancement d'une application, etc.

Comme je n'ai pas trouvé de documentation pertinente, j'ai également rédigé un petit article de blog sur le sujet suivant premiers pas dans l'utilisation de crankd .

5voto

Joe Hildebrand Points 141

Cela semble fonctionner avec bash :

(echo -e "n.add State:/Network/Global/IPv4\nn.watch" & cat) | \
 scutil | \
 awk '/notification/ {system("echo change")}'

remplacer echo change avec votre commande, en gardant à l'esprit que si vous avez besoin de citer quoi que ce soit dans votre commande, vous devrez utiliser '\'' :

(echo -e "n.add State:/Network/Global/IPv4\nn.watch" & cat) | \
 scutil | \
 awk '/notification/ {system("echo '\''&'\''")}'

3voto

cwd Points 16338

ControlPlane : "L'informatique contextuelle

ControlPlane est un portage direct de MarcoPolo et en fait, une grande partie de la configuration de MarcoPolo fonctionne toujours avec ControlPlane, mais en mieux ! ControlPlane est compatible avec les Macs Intel 32 et 64 bits fonctionnant sous Snow Leopard et plus.

enter image description hereenter image description hereenter image description here

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X