我一个嵌入式Linux系统上运行的Python(2.7.2)具有大致此启动顺序:Python的插座的getaddrinfo(GAI)错误
0)重新启动
1)等待2分钟
2)通过DHCP获取网络配置
守护进程使用ntplib获取当前时间并相应地更新其时钟。
import ntplib # http://pypi.python.org/pypi/ntplib/
...
self.ntpClient = ntplib.NTPClient()
...
def getDate(self):
try:
logging.info('Sending NTP request to %s' % ('pool.ntp.org'))
response = self.ntpClient.request('pool.ntp.org')
secs = time.localtime(response.tx_time)
logging.info('Response returned')
return secs
except Exception, e:
logging.exception(e)
return RESULT_FAILURE
出现一个问题,如果守护进程开始试图解决地址信息前的DHCP已经运行(步骤2)。在DHCP客户端运行之后,即使仍然是一个错误。
这里是个例外:
ERROR:[Errno 2] temporary failure in name resolution.
Traceback (most recent call last):
File "/home/root/ntp_manager/ntp_manager.py", line 34, in getDate
response = self.ntpClient.request('pool.ntp.org')
File "/usr/lib/python2.7/ntplib.py", line 265, in request
addrinfo = socket.getaddrinfo(host, port)[0]
gaierror: [Errno 2] temporary failure in name resolution.
但是,如果程序NtpClient使得其第一尝试后,DHCP,然后一切工作正常。
这是因为如果误差是某种缓存的产品(?!)
我已经江郎才尽,一些帮助,将不胜感激。
谢谢
听起来像你需要systemd或openrc或类似的东西(基于依赖的启动脚本)。 – Keith
快速和肮脏的解决方案:尝试ping一台互联网主机。如果如果工程运行DHCP,否则睡一会儿并尝试再次ping。 –
感谢您的建议,但我已经制定出另一个更简单的解决方案。 – pjama