我不认为 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 文件的程序。