首先发现代码里这段运行报错:
socket.gethostbyname_ex(host_name)
Traceback (most recent call last):
File “”, line 1, in
socket.gaierror: [Errno -2] Name or service not known
import socket
host_name = socket.gethostname()
print(socket.gethostbyname(host_name))
怀疑是域名解析出问题,首先查看域名解析文件resolv.conf ,是否正常,发现文件没问题
cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 114.114.114.114
一直在纠结socket那段代码,host_name 去转换解析为ip地址一直失败,那就是域名解析肯定出了问题,但是配置文件又正常,于是发现ping host_name,其他正常环境都是正常的,ping这个环境就直接失败,反复修改配置也
没效果
查看/etc/hosts,检查localhost是否配置
这些文件都正常,定位了很久,直到发现ping localhost 同样找不到ip,ping127可以成功,但是把dns 114注释了,就又可以成功,重启了NetworkManager,看日志,很多误导性的报错也影响了判断
突然发现往hosts文件里新增域名解析配置没有效果,这时候开始研究hosts文件生效的原理,
发现是由/etc/nsswitch.conf nsswitch服务管理的。
nsswitch(Name Service Switch)是一个用于配置系统命名服务解析的工具。它定义了在系统中查找特定信息的方法,例如主机名、用户和组。/etc/nsswitch.conf 文件是 nsswitch 的配置文件,用于指定系统在查找特定信息时应该使用哪些服务
查看配置文件 ,发现/etc/nsswitch.conf是个软连接,已经飘红,原链接文件已经被删除,
这时候开始找,authselect这个目录是怎么生成并删除的,在历史记录中发现了终于:
由于 authconfig命令导致的修改了配置并修改了原文件链接到新的目录,我恢复时删除了authselect目录导致域名解析出现问题,从其他节点恢复了这个文件后,hosts文件生效,localhost也可以ping通。
晚上定位了2,3个小时,早上来又一直看,怀疑了很多点,网卡的配置,mac地址是不是冲突,最后才发现是hosts文件不生效导致的,简单的域名解析,工作感觉是踩了很多坑也。