Запустіть сценарій в OS X 10.6 на мережевому підключенні. (як-от /etc/network/if-up.d/)


17

Чи є спосіб запустити сценарій, коли в Mac OS X з'явиться мережевий інтерфейс?

Я спробував поставити сценарій з назвою ip-up в / etc / ppp, але він, здається, не спрацьовує, коли я відключаюсь та підключаюся до бездротової мережі.

Я вважаю за краще не працювати із завданням, щоб постійно перевіряти, чи змінився стан мережі. У деяких дистрибутивах Linux можна досягти цього, поставивши скрипт у /etc/network/if-up.d/. Чи є щось подібне для Mac OS X?

Відповіді:


5

Ви можете спробувати MarcoPolo або одну з подібних утиліт, перелічених на його веб-сайті. Changer Location виглядає перспективно, якщо ви мінімаліст.


1
Я вважаю за краще це робити без встановлення додаткових програм. Однак посилання Changer Changer виявилося дуже корисним, оскільки включає конфігурацію запуску для запуску програми на зміну мережі.
Zxaos

1
Zxaos: Звичайно, саме тому я включив його. Це в основному шаблон сценарію запуск / bash для всього, що ви хочете. Врятує вас від написання кодового коду самостійно.
Даніель Бек

якщо я можу вам заважати подивитися на цей дуже релевантний q ( superuser.com/questions/265861 ), я дуже вдячний (як запустити і зупинити vpn з командного рядка на OSX). Вибачайте, я видаляю цей коментар через кілька годин незалежно. Дякую в будь-якому випадку!
Дан Розенстарк

1
@Yar Не проблема, але зараз у центральній Європі минуло півночі, тому, будь ласка, зачекайте півдня або близько того, перш ніж подзвонити мені (і, будь ласка, зробіть це, якщо поки що нічого не з’явиться, це цікаве питання).
Даніель Бек

Дякую @Daniel Beck Як ви, можливо, вже бачили, відповідь використовував Applescript. Напевно, це багато речей на OSX, але я часто це забуваю.
Dan Rosenstark

19

Здається, що для мене /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, але були випадки, коли цього було недостатньо.


Це мені дуже допомогло, але є помилка (знайдена [цією відповіддю] [1]): <plist version="1.0">тег відкриття відсутній. [1] [ apple.stackexchange.com/a/181127/56862]
LiberalArtist

@patrix (і LiberalArtist): Дякую за виправлення. Я не помічав, бо це працювало для мене в 10.8.5. Я думаю, що пізніші версії є більш суворими.
mivk

@mivk Що саме слід змінити в цих SystemConfigurationфайлах? Якщо я
підключую / відключую

Це здається близьким, але якщо я вимикаю та повертаю wifi, програма запускається лише тоді, коли мережа відключається, а не коли вона знову підключається. Я бачу, що /etc/resolv.confфайл видаляється та читається, коли мій стан wifi змінюється, тому я не впевнений, чому він працює лише при відключенні.
Метт Хаггінс

5

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

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


Ваш блог захищений від анонімного читання. Подумайте про дублювання вмісту тут.
nfirvine

Вибач за це. Мій блог перемістився, тому я щойно оновив URL-адресу. Не соромтесь відредагувати відповідь, якщо відчуваєте, що частина інформації з моєї публікації може бути перенесена у цю відповідь.
Хуан А. Наварро

4

Це, здається, працює в баші:

(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 '\''&'\''")}'

3

ControlPlane: "Контекстно-чутливі обчислення"

ControlPlane - це прямий порт MarcoPolo, і фактично значна частина конфігурації від MarcoPolo все ще працює з ControlPlane, просто краще! ControlPlane підтримує 32-ти та 64-бітні Mac-системи на базі Intel, на яких працює Snow Leopard і вище.

введіть тут опис зображення введіть тут опис зображення введіть тут опис зображення


2

Почніть з запуску. Можливо, ви можете мати подібну функціональність, використовуючи її.

EDIT : Через 9 років, можливо, ні. Відповідно до цього запису у Вікіпедії :

У 2014 році з ОС X 10.10 та iOS 8 Apple перенесла код для запуску до закритого джерела libxpc


здається, що це запуск у правильному напрямку, особливо якщо я можу зрозуміти, як інші програми використовують це для виявлення змін у мережі.
Zxaos

@Zxaos, запуск здається кроком у правильному напрямку, але немає надійного способу виявити зміни в мережі. Дивіться мою відповідь щодо рішення, використовуючи замість цього crankd .
Хуан А. Наварро

URL-адреса веде на сторінку 404.
Славен Резіч

@ Slaven-Rezic Оновлена ​​відповідь та видалено старе посилання.
CaseyIT
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.