-1

Я пытаюсь смоделировать предстоящую високосную секунду, чтобы можно было протестировать поведение своего приложения примерно в это время, но я не уверен, что правильно настроил тест.

На CentOS 7.2.1511 внутри виртуальной машины Oracle VirtualBox, вот как я настраиваю NTP и запускаю тест:

yum install ntp

echo "server 127.127.1.0" > /etc/ntp.conf
echo "fudge 127.127.1.0 stratum 10" >> /etc/ntp.conf
echo "leapfile \"/var/ntp/leap-seconds.list\"" >> /etc/ntp.conf

mkdir /var/ntp
wget -P /var/ntp https://www.ietf.org/timezones/data/leap-seconds.list 
setenforce 0  # avoids having to configure SELinux access to the .list

date -s "2016-12-31 23:55" 
service ntpd restart

Тем не менее, если оставить следующую команду запущенной, это показывает, что никакого временного шага не существует:

$ i=0; while true; do echo -n "$i: "; date -u; ((i++)); sleep 1; done
(..)
45: Sat 31 Dec 23:59:56 UTC 2016
46: Sat 31 Dec 23:59:57 UTC 2016
47: Sat 31 Dec 23:59:58 UTC 2016
48: Sat 31 Dec 23:59:59 UTC 2016
49: Sun  1 Jan 00:00:00 UTC 2017
50: Sun  1 Jan 00:00:01 UTC 2017
51: Sun  1 Jan 00:00:02 UTC 2017
52: Sun  1 Jan 00:00:03 UTC 2017
53: Sun  1 Jan 00:00:04 UTC 2017
(..)

Я наблюдаю за выходными данными, и каждая строка печатается одну секунду за другой.

И (хотя это труднее продемонстрировать), я не вижу никаких признаков вращения часов в файлах данных, создаваемых моим приложением; моя конфигурация NTP должна быть пошаговой вместо поворота в любом случае:

$ cat /etc/sysconfig/ntpd
OPTIONS="-g"

Мой локальный сервер NTP refclock, кажется, выполняет работу в некоторой степени, потому что системный журнал говорит:

Dec 31 23:59:59 localhost ntpd[1871]: 0.0.0.0 051b 0b leap_event

Что мне здесь не хватает?

1 ответ1

1

Я хотел бы добавить это как комментарий к ответу grawity, но мне не хватает представителя. Хотя он (ы) прав, что в неправильном часовом поясе не учитывается наличие секунды с именем "60" (т. Е. Вы не увидите метку времени 23:59:60), ядро Linux все равно должно вставить вторая секунда, повторяя секунду 59 дважды (см. здесь для получения дополнительной информации). Так что вы должны увидеть повтор отметки времени 23:59:59. Я воспроизвел то, что вы видите, так что вы не сумасшедший, но я все еще пытаюсь понять, почему.

Одна вещь, которую нужно проверить, это то, что ваш локальный демон ntp определенно вставляет отложенный флаг ожидания (либо проверяя LI = 1 в пакете, используя Wireshark или аналогичный, либо используя эту команду ntpq:

ntpq -c 'lassoc' -c "mrv &1 &999 leap,srcadr,stratum"

Ищите прыжок = 01. Мой так расследования еще продолжаются ...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .