首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在网络连接或重新连接时让launchd运行任务

在网络连接或重新连接时让launchd运行任务
EN

Stack Overflow用户
提问于 2015-05-11 06:26:17
回答 1查看 1.3K关注 0票数 1

我通过launchctl运行一个自定义的python脚本来更新各种动态DNS服务器,它每15分钟运行一次。这既是过度杀伤力也是不足杀伤力。

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

注意,这与keep alive参数不同。我的计算机很可能永远不会失去网络连接。它在局域网上,所有东西都有备用电源。因此,只有互联网的可达性才是重要的。

EN

回答 1

Stack Overflow用户

发布于 2017-07-20 10:27:51

我不认为launchd有任何内置的触发器来启动网络,但你可以监控文件路径的变化。因此,如果我们可以找到一个在网络连接时更新的文件,我们就可以实现所需的功能。

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

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

代码语言:javascript
复制
<?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>

只有当您的局域网使用DHCP寻址时,这才能起作用-因为DHCP客户端是更新您的resolv.conf文件的程序。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30157288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档