ntp
仅当真正的互联网连接到位(而不仅仅是链接)时,我才需要启动服务(即)。我似乎注意到,当不满足条件时,某些启动脚本会自行延迟(通常直到网络设备可用)。
如何在启动脚本中正确执行此操作?
- 启动脚本将运行检查(另一个脚本)
- 根据结果,它要么实际启动服务,要么延迟一段时间,然后重新执行检查
我可以想象 bashwhile
条件,但脚本会被阻塞,在进入后台之前,我想确保没有开箱即用的解决方案内置于启动机制和环境中。
注意:这是后续上一个关于启动脚本依赖关系的问题。
答案1
在启动时启动脚本并让它等待网络启动将是一种奇怪而复杂的方式来执行您想要的操作,即在网络启动时运行某些内容。
如果您想在网络启动时执行某些操作,请将其添加到网络启动脚本中,而不是添加到系统启动脚本中。 Systemd 和 Upstart 统一了这些,但 Debian wheezy 使用传统的 init 系统,该系统仅管理启动(和运行级别更改)。
在Debian及其衍生版本下,你可以放置一个脚本来运行当出现界面时在/etc/network/if-up.d/
。
如果您需要监控 Internet 连接而不是网络连接,则需要执行以下操作:
- 选择网络连接的定义。互联网不是中心化的;您只能检查特定主机是否响应特定请求。这可能会受到防火墙的影响。
- 在做出反应之前确定网络可以关闭多长时间。这取决于您想要实现的目标。如果您选择的时间间隔太短,一个简单的丢包就会让您错误地认为网络已关闭。如果您选择的间隔太长,您将无法快速检测到失败的连接。
没有什么神奇的方法可以实现这一点。最明显的方法是在一个循环中联系为 (1.) 选择的服务器,该循环在联系尝试之间休眠为 (2.) 选择的时间。这是检测连接何时开始的唯一方法。还有其他方法可以观察连接丢失,例如打开 TCP 连接并在该打开的连接上不时发送数据包。
有以下三种可能的方法:
- 放置一个定期测试连接性的 crontab,将状态保存在文件中并在状态更改时做出反应。
- 让 shell(或其他)脚本永远运行,并围绕连接测试永远循环。
- 使用更先进的监控工具。