我在 Ubuntu 16.04 上运行一个正在轮询 REST API 的 nodejs 程序。它每隔几秒钟轮询同一个网站,工作了大约 3 个小时,然后失败了,说找不到该网站。我从节点收到一条错误:“失败,原因:getaddrinfo ENOTFOUND”。
这是一个节点程序,我通过 nohup & 开始运行,然后注销。它一直在运行,我可以通过我的网站进行验证,因为该过程在运行时创建了一个输出日志文件。
这看起来很奇怪,因为它已经连续几个小时转到同一个地址了。我检查了日志。在我的输出日志停止的同时,我在 auth.log 中看到了以下条目:
May 24 01:38:29 order-gateway systemd-logind[1028]: Removed session 237.
此时(01:38),没有用户登录。会话 237 已启动:
May 23 17:22:38 order-gateway systemd-logind[1028]: New session 237 of user ubuntu.
我认为我启动该过程的会话是 238(虽然我不确定)。1)会话在用户注销后数小时被删除,2)删除会话导致 DNS 出现问题,这对我来说毫无意义。
附加信息:resolv.conf 已自动设置并使用 Google 的 DNS (8.8.8.8)。以下是我所拥有的:
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 8.8.8.8
nameserver 8.8.4.4
search openstacklocal
我没有设置它。请帮忙。我很想知道发生了什么,当然,也希望解决这个问题。
更新:我一直在监控情况,并确认当我启动的会话进程被删除(systemd-logind[1001])时,进程会记录错误并结束。这是在我编辑 logind.conf 以取消注释 KillUserProcesses=no 之后,这样用户进程就不会被终止。
补充更新:因果关系变得不那么清晰了。我怀疑端点可能不稳定,并且终止过程在程序失败后立即发生。我想了解 DNS 为何变得不稳定。支持人员建议手动将端点添加到 /etc/hosts,这似乎有效(随后另一个问题终止了该程序,但它运行的时间比我预期的要长得多,这就是我考虑反转因果关系的原因)。