17

Есть ли способ запустить скрипт, когда в Mac OS X появляется сетевой интерфейс?

Я попытался поместить скрипт с именем ip-up в /etc /ppp, но он не срабатывает, когда я отключаюсь и снова подключаюсь к беспроводной сети.

Я бы предпочел не запускать задание cron, чтобы постоянно проверять, изменилось ли состояние сети. В некоторых дистрибутивах Linux вы можете сделать это, поместив скрипт в /etc/network/if-up.d/. Есть ли что-нибудь подобное для Mac OS X?

6 ответов6

18

Агент launchd, просматривающий /etc/resolv.conf и два связанных с сетью файла .plist в /Library/Preferences/SystemConfiguration/ похоже, работает для меня (в 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>

Ранее я использовал только /etc/resolv.conf, но были случаи, когда этого было недостаточно.

5

Вы можете попробовать MarcoPolo или одну из аналогичных утилит, перечисленных на его сайте. Расположение Changer выглядит многообещающе, если вы минималист.

5

Вы должны рассмотреть возможность использования crankd, который точно позволяет запускать сценарии в ответ на многие системные события, такие как изменения сети, активность файловой системы, запуск приложений и т.д.

Поскольку я не смог найти никакой разумной документации, я также написал небольшой пост в блоге о том, как начать использовать crankd.

3

ControlPlane: «контекстно-зависимые вычисления»

ControlPlane - это прямой порт MarcoPolo, и фактически большая часть конфигурации от MarcoPolo все еще работает с ControlPlane, просто лучше! ControlPlane поддерживает 32- и 64-битные компьютеры Mac на базе Intel, работающие под управлением Snow Leopard и выше.

2

Начните с launchd. Вы можете быть в состоянии схожей функциональности, используя его.

2

Это похоже на работу в Bash:

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

замените echo change своей командой, помня, что если вам нужно что-нибудь заключить в команду, вам нужно использовать '\'':

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .