在没有网络连接的情况下启动的进程永久无法使用它


3

简而言之:进程第一次尝试使用连接时,如果由于没有可用连接而失败,那么单个进程将永远无法重新获得使用网络的能力。我必须杀死并重启它。

我有一个ruby脚本试图解决'google.com'三次。如果我禁用网络(通过NetworkManager)或关闭我的物理WLAN关闭,启动脚本,让它失败一次,然后重新启用网络,其他两个解决方案也将失败,即使系统的其余部分有网络。

类似的Python脚本展示了相同的结果,以及浏览器lynx。不是火狐!这些行为都在VM和运行最新Manjaro x64 XFCE的物理机器上进行了测试。在最新的Ubuntu x64上,相同的测试工作正常。

为什么会这样?这是一个错误,功能,怪癖?

编辑:

关于Manjaro,内容 /etc/resolv.conf 由resolvconf重新生成。

  • 网络启用: search lan; nameserver 192.168.1.1
  • 禁用网络:空文件

Ruby / Python / Lynx必须只读 resolv.conf 一旦。因此,在第一次请求时,它会找到空文件,并且永远无法再解析任何名称。

在Ubuntu上, /etc/resolv.conf

  • 网络启用: nameserver 127.0.1.1; search lan
  • 禁用网络: nameserver 127.0.1.1

因此,当Ruby / Python / Lynx在禁用的网络上读取它时,当连接恢复时,它们仍然会有一个名称服务器来联系。 Manjaro设置的问题在于没有连接,没有名称服务器。 Ubuntu运行dnsmasq为127.0.1.1而Manjaro不运行。


猜猜:Python或Ruby解释器读取 resolv.conf 曾经,然后再也没有,所以他们没有意识到变化。谷歌为“linux解析器”解释名称解析是如何工作的。
dirkt

我建议设置 resolv.conf 你想要它的方式并使它不可变。
David Schwartz

Answers:


2

我看待它的方式,有两种解决方案。

  1. 编辑resolvconf.conf: name_servers=192.168.1.1 或者你最常见的名字服务器。问题:不是每个域名服务器都是 192.168.1.1 喜欢我的。如果您使用其他网络连接,那么您的进程将因名称服务器而处于中断状态 192.168.1.1 可能不存在那里。
  2. 让NetworkManager设置并使用dnsmasq 通过添加几行来 NetworkManager.conf

我试过了两个,并且避免了症状。第二个似乎更干净,更容易设置,但不是轻量级。

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.