ネットワーク接続でOS X 10.6でスクリプトを実行します。(/etc/network/if-up.d/など)


17

Mac OS Xでネットワークインターフェイスが起動したときにスクリプトを実行する方法はありますか?

ip-upという名前のスクリプトを/ etc / pppに配置しようとしましたが、ワイヤレスネットワークを切断して再接続しても起動しないようです。

ネットワークステータスが変更されたかどうかを常に確認するために、cronジョブを実行する必要はありません。一部のLinuxディストリビューションでは、スクリプトを/etc/network/if-up.d/に配置することでこれを実現できます。Mac OS Xに類似したものはありますか?

回答:


5

MarcoPoloまたはそのWebサイトにリストされている同様のユーティリティのいずれかを試すことができます。あなたがミニマリストなら、ロケーションチェンジャーは有望に見えます。


1
追加のプログラムをインストールせずにこれを実行したいと思います。ただし、Location Changerリンクは、ネットワーク変更でプログラムを実行するためのlaunchd構成が含まれているため、非常に役立ちました。
Zxaos

1
Zxaos:確かに、それが私がそれを含めた理由です。それは基本的にあなたが望むもののためのlaunchd / bashスクリプトテンプレートです。ボイラープレートコードを自分で記述する必要がなくなります。
ダニエルベック

この非常に関連性の高いq(superuser.com/questions/265861)を見るのが面倒な場合は、感謝します(OSXのコマンドラインからvpnを起動および停止する方法)。勧誘をすみません、私は関係なく、数時間でこのコメントを削除します。いずれにせよありがとう!
ダンローゼンスターク

1
@Yar問題ありませんが、今は中央ヨーロッパの深夜0時を過ぎているので、半日ほど待ってからもう一度pingを送信してください(その間に何も表示されない場合は興味深い質問です)。
ダニエルベック

ありがとう、ダニエル・ベック。おそらく既に見たように、Applescriptを使用することが答えでした。おそらくOSX上の多くのことですが、私はしばしばそれを忘れます。
ダンローゼンスターク

19

launchdエージェントが監視し/etc/resolv.conf、2つのネットワーク関連の.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ファイルで何が変更されるのでしょうか?ネットワークケーブルを抜き差ししても、何も変わらないようです
IceFire

これは近いように見えますが、wifiをオフにして再びオンにすると、プログラムはネットワークが切断されたときにのみ実行され、再接続されたときは実行されません。私はそれを見ていますか/etc/resolv.conf、それが唯一の切断で実行されている理由は、私はわからないので、ときに私の無線LANの状態が変化ファイルを削除して再添加されます。
マットハギンズ

5

crankdの使用を検討する必要があります。これにより、ネットワークの変更、ファイルシステムのアクティビティ、アプリケーションの起動など、多くのシステムイベントに応じてスクリプトを正確に実行できます。

私は賢明なドキュメントを見つけることができなかったので、私はまた、curldの使用を開始することに関する小さなブログ投稿を書きました


あなたのブログは匿名の閲覧から保護されています。ここでコンテンツを複製することを検討してください。
nfirvine

ごめんなさい ブログが移動したので、URLを更新しました。私の投稿からの情報の一部がこの回答に移行できると思われる場合は、回答を自由に編集してください。
フアンA.ナバロ

4

これは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 '\''&'\''")}'

3

ControlPlane:「状況依存コンピューティング」

ControlPlaneはMarcoPoloの直接のポートであり、実際、MarcoPoloの構成の多くは依然としてControlPlaneで動作します。ControlPlaneは、Snow Leopard以降を実行する32ビットおよび64ビットのIntelベースのMacをサポートしています。

ここに画像の説明を入力してください ここに画像の説明を入力してください ここに画像の説明を入力してください


2

launchdから始めます。これを使用して同様の機能を実行できる場合があります。

編集:9年後、多分そうではありません。このウィキペディアのエントリによると:

2014年、OS X 10.10およびiOS 8で、Appleはlaunchdのコードをクローズドソースlibxpcに移動しました


launchdは、特に他のプログラムがそれを使用してネットワークの変更を検出する方法を理解できる場合、正しい方向への一歩のように思えます。
Zxaos

@ Zxaos、launchd は正しい方向への一歩のように思えますが、ネットワークの変更を検出させる信頼できる方法はありません。代わりに、crankdを使用したソリューションの私の答えを参照しください。
フアンA.ナバロ

このURLは404ページにつながります。
Slaven Rezic

@ Slaven-Rezic回答を更新し、古いリンクを削除しました。
CaseyIT
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.