Mac OS Xでネットワークインターフェイスが表示されたときにスクリプトを実行する方法はありますか?
/ etc/pppにip-upという名前のスクリプトを入れてみましたが、ワイヤレスネットワークへの接続を切断して再接続しても起動しないようです。
ネットワークステータスが変更されたかどうかを常に確認するために、cronジョブを実行する必要はありません。一部のLinuxディストリビューションでは、スクリプトを/etc/network/if-up.d/に置くことでこれを実現できます。 Mac OS Xに似たものはありますか?
MarcoPolo またはそのWebサイトにリストされている同様のユーティリティの1つを試すことができます。 ロケーションチェンジャー あなたがミニマリストなら有望に見えます。
/etc/resolv.conf
を監視するlaunchdエージェント、および/Library/Preferences/SystemConfiguration/
の下にある2つのネットワーク関連.plistファイルは、私には(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しか使用していませんでしたが、それだけでは不十分な場合がありました。
crankd の使用を検討する必要があります。これにより、ネットワークの変更、ファイルシステムのアクティビティ、アプリケーションの起動など、多くのシステムイベントに応答してスクリプトを実行できます。
賢明なドキュメントが見つからなかったので、 crankdの使用を開始する に関する小さなブログ投稿も書きました。
これは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 '\''&'\''")}'
ControlPlaneはMarcoPoloの直接の移植版であり、実際、MarcoPoloの構成の多くは引き続きControlPlaneで機能します。 ControlPlaneは、Snow Leopard以降を実行する32ビットおよび64ビットのIntelベースのMacをサポートしています。
Launchdから始めます。あなたはそれを使って同様の機能をすることができるかもしれません。
[〜#〜] edit [〜#〜]:9年後、そうではないかもしれません。 このWikipediaのエントリ によると:
2014年、OS X10.10およびiOS8では、Apple起動するコードをクローズドソースのlibxpcに移動しました