Я использовал blockhosts в течение некоторого времени, и пока это было здорово. Недавно я обновил Ubuntu до 10.10, и я начал видеть некоторое неустойчивое поведение. При ближайшем рассмотрении я заметил множество ошибок в /var/log/blockhosts.log:
ERROR: failed to parse date for ip 188.17.155.25, using now value:
time data '2010-11-01 03:04:02 AMT' does not match format '%Y-%m-%d %H:%M:%S %Z'
Факт часового пояса, появляющийся как "AMT" (армянское время), странный. Мой часовой пояс задается как:
$ cat /etc/timezone
Europe/Amsterdam
Я просмотрел код blockhosts.py
, где дата обрабатывается и проверяется, и я видел, что это обрабатывается как time
.
Следующий код показывает проблему:
import time
now = time.time()
str1 = time.strftime('%Y-%m-%d %H:%M:%S %Z', time.localtime())
str2 = time.strftime('%Y-%m-%d %H:%M:%S %Z')
print str1
print str2
Вывод следующий:
2010-12-06 16:18:47 AMT
2010-12-06 16:18:47 CET
Значение time.tzname
равно ('CET', 'CEST')
, поэтому я не уверен, откуда происходит "AMT"...
Любая помощь будет оценена!
Обновление:
Из предложений в комментариях:
/etc/localtime
не является символической ссылкой на /usr/share/zoneinfo/Europe/Amsterdam
, но они являются одним и тем же файлом: $ ls -l /etc/localtime
-rw-r--r-- 1 root root 2917 2010-11-18 09:35 /etc/localtime
$ ls -l /usr/share/zoneinfo/Europe/Amsterdam
-rw-r--r-- 1 root root 2917 2010-11-11 09:35 /usr/share/zoneinfo/Europe/Amsterdam
$ diff /etc/localtime /usr/share/zoneinfo/Europe/Amsterdam
$ echo $TZ
$ env | grep TZ
2010-12-07 11:12:09 AMT
2010-12-07 11:12:09 CET
Модуль времени не делает ничего, кроме вызова вызовов API Unix C, поэтому я бы заподозрил вашу конфигурацию в первую очередь.
Тем не менее, time.strftime('%Y-%m-%d %H:%M:%S %Z', time.localtime())
и time.strftime('%Y-%m-%d %H:%M:%S %Z')
должны быть эквивалентны, поскольку time.localtime() является значением по умолчанию для аргумента, поэтому, как они отличаются друг от друга, вы находитесь за пределами меня.