我在嵌入式 linux 系统上运行 Python (2.7.2) 大致具有以下启动顺序:
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之后进行第一次尝试,那么一切正常。
就好像错误是某种缓存的产物(?!)
我已经没有想法了,非常感谢一些帮助。
谢谢