1

我运行一个自定义 python 脚本来通过 launchctl 更新各种动态 DNS 服务器,它每 15 分钟运行一次。这既是矫枉过正又是矫枉过正。

如果脚本仅在可达性更改时执行,然后作为后备可能每 30 分钟执行一次,那就太好了。我可以很容易地更新 Python 脚本以在调用更新之前检查外部地址是否已更改,但如果我的连接中断并以不同的 IP 地址恢复,我不想等待 15-30 分钟.

请注意,这与 keep alive 参数不同。奇怪的是我的电脑永远不会失去它的网络连接。它在局域网上,一切都有备用电源。所以,只有互联网可达性很重要。

4

1 回答 1

3

我不认为 launchd 有任何内置的网络触发器,但您可以监视文件路径的更改。因此,如果我们可以找到在网络连接时更新的文件,我们就可以实现所需的功能。

一个这样的文件是 /var/run/resolv.conf - 每当计算机更新 DHCP 租约时都会写入此文件。它将在您第一次连接时更新,并随着 DHCP 租约的更新而定期更新(时间由 DHCP 服务器设置)。

这是一个启动的 plist 文件示例。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>org.example.on-dhcp-renew</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/darrin/bin/on-dhcp-renew.sh</string>
    </array>
    <key>WatchPaths</key>
    <array>
        <string>/var/run/resolv.conf</string>
    </array>
</dict>
</plist>

这仅在您为 LAN 使用 DHCP 寻址时才有效 - 因为 DHCP 客户端是更新您的 resolv.conf 文件的程序。

于 2017-07-20T02:27:51.317 回答