Запустіть сценарій в 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.