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

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

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

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

类似的 Python 脚本以及浏览器 lynx 也表现出相同的结果。但 Firefox 不是!这些行为都在运行最新 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 为 127.0.1.1 运行 dnsmasq,而 Manjaro 没有。

答案1

在我看来,有两种解决方案。

  1. 编辑 resolvconf.conf:name_servers=192.168.1.1或您最常用的名称服务器。问题:并非每个名称服务器都像192.168.1.1我的一样。如果您连接到不同的网络,您的进程将保持中断,因为192.168.1.1那里可能不存在名称服务器。
  2. 让 NetworkManager 设置并使用 dnsmasq通过添加几行NetworkManager.conf

我尝试了这两种方法,都避免了问题。第二种方法似乎更干净,也更容易设置,但不够轻便。

相关内容