組み込み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の後に最初の試行を行う場合、すべてが正常に機能します。
エラーが何らかのキャッシングの結果であるかのようです(?!)
アイデアが足りなくなったので、助けていただければ幸いです。
ありがとう