在 OS X 10.6 中通过网络连接运行脚本。(如/etc/network/if-up.d/)

Zxa*_*aos 18 networking automation shell-script macos

当 Mac OS X 中出现网络接口时,有没有办法运行脚本?

我试过在 /etc/ppp 中放置一个名为 ip-up 的脚本,但是当我断开连接并重新连接到无线网络时它似乎没有启动。

我宁愿不必运行 cron 作业来不断检查网络状态是否已更改。在某些 linux 发行版中,您可以通过在 /etc/network/if-up.d/ 中放置一个脚本来完成此操作。Mac OS X 有类似的东西吗?

miv*_*ivk 20

一个launchd代理正在观察/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>
Run Code Online (Sandbox Code Playgroud)

我以前只使用过/etc/resolv.conf,但有些情况下这还不够。


Dan*_*eck 5

您可以尝试MarcoPolo或其网站上列出的类似实用程序之一。如果您是极简主义者,Location Changer看起来很有希望。


Jua*_*rro 5

您应该考虑使用curld,它准确地允许您运行脚本以响应许多系统事件,例如网络更改、文件系统活动、应用程序启动等。

由于找不到任何合理的文档,我还写了一篇关于开始使用曲柄的小博客文章。


小智 5

这似乎在 bash 中有效:

(echo -e "n.add State:/Network/Global/IPv4\nn.watch" & cat) | \
 scutil | \
 awk '/notification/ {system("echo change")}'
Run Code Online (Sandbox Code Playgroud)

替换echo change为您的命令,请记住,如果您需要在命令中引用任何内容,则需要使用'\''

(echo -e "n.add State:/Network/Global/IPv4\nn.watch" & cat) | \
 scutil | \
 awk '/notification/ {system("echo '\''&'\''")}'
Run Code Online (Sandbox Code Playgroud)