在网络连接的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有类似的东西吗?

Answers:


5

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


1
我宁愿不安装其他程序就这样做。但是,“位置更改器”链接非常有用,因为它包含用于在网络更改中运行程序的启动配置。
Zxaos 2010年

1
Zxaos:当然,这就是为什么要包含它。基本上,它是您所需的启动/ bash脚本模板。使您不必自己编写样板代码。
丹尼尔·贝克

如果我可以打扰您看看这个非常相关的q(superuser.com/questions/265861),我将非常感谢(如何从OSX的命令行启动和停止vpn)。不好意思,我会在几个小时后删除此评论。无论如何谢谢!
丹·罗森斯塔克2011年

1
@Yar没问题,但是现在已经是中欧的午夜了,所以请等待半天左右再对我进行ping操作(如果此期间什么都没发生,请这样做,这是一个有趣的问题)。
丹尼尔·贝克

感谢@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 2015年

@mivk这些SystemConfiguration文件中到底应该更改什么?如果插入/拔出网络电缆,则似乎什么都没有改变
IceFire '18

这似乎很近,但是如果我关闭并重新打开wifi,则该程序仅在网络断开时运行,而在重新连接时不运行。我确实看到该/etc/resolv.conf文件在wifi状态更改时已删除并读取,因此我不确定为什么它仅在断开连接时运行。
马特·哈金斯

5

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

由于我找不到任何明智的文档,因此我还写了一篇有关开始使用crankd的小博客文章。


您的博客受到匿名阅读保护。请考虑在此处复制内容。
nfirvine

对于那个很抱歉。我的博客已移动,因此我刚刚更新了URL。如果您认为我帖子中的某些信息可以移植到此答案中,请随时编辑答案。
胡安·纳瓦罗

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

从启动开始。您也许可以使用它获得类似的功能。

编辑:9年后,也许不是。根据此维基百科条目

2014年,使用OS X 10.10和iOS 8,Apple将要启动的代码移动到了封闭源代码libxpc


启动似乎是朝着正确方向迈出的一步,尤其是如果我能弄清楚其他程序如何使用它来检测网络变化时。
Zxaos 2010年

@Zxaos,启动 似乎是朝着正确方向迈出的一步,但没有可靠的方法来使其检测网络变化。请参阅我的答案以获取使用crankd的解决方案。
Juan A. Navarro

URL指向404页面。
Slaven Rezic

@ Slaven-Rezic更新了答案,并删除了旧链接。
CaseyIT
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.