といった場合に利用できます
動作原理
起動したいコマンドを /path/to/reconnect.sh とします
macOSはネットワークの構成が変わるとDNSを再設定します
例えば
は,DNSが再設定されます
DNSの設定はファイル /etc/resolv.conf に保存されます.つまりネット切替時は,ファイル /etc/resolv.conf のタイムスタンプが更新されます.
そこでファイルのタイムスタンプを監視し,タイムスタンプが更新されたら コマンド /path/to/reconnect.sh を実行する,という設定を launchd に登録します.
launchd の設定
plist ファイルの作成
以下の内容で ~/Library/LaunchAgents/reconnect.plist を作成します
<?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>networkchange</string> <key>LowPriorityIO</key> <true/> <key>ProgramArguments</key> <array> <string>/path/to/reconnect.sh</string> </array> <key>WatchPaths</key> <array> <string>/var/run/resolv.conf</string> </array> <key>RunAtLoad</key> <true/> </dict> </plist>
/path/to/reconnect.sh の部分は適宜修正してください.ここで起動したいスクリプトをフルパスで指定します
構文のチェック
$ plutil -lint reconnect.plist
reconnect.plist: OK
"OK"と表示されることを確認
動作確認
動作確認は launchctl コマンドで行います
load で登録,
$ launchctl load ~/Library/LaunchAgents/reconnect.plist
unloadで登録解除です
$ launchctl unload ~/Library/LaunchAgents/reconnect.plist
なおLoad済みの状態で,再度 launchctl load すると「Load failed: 5: Input/Output error」のエラーがでます
自動登録
設定は不要です
設定ファイルで RunAtLoad を指定しているので,ログイン時に自動で loadされます