Публичное пространство

Синхронизация времени на серверах Linux

CentOS 7 и выше

В Centos/Redhat 7 для синхронизации времени по умолчанию используется служба chrony.
Службу ntp лучше отключить во избежании сбоев

Как и ntp, chrony выступает в качестве клиента и/или сервера синхронизации, в зависимости от настроек в /etc/chrony.conf

Порядок действий

1. Укажите свой сервер для получения времени, например с IP-адреса 172.29.16.201:

server 172.16.0.1

Допускается указание нескольких серверов, служба сама выберет наиболее подходящий по доверию/доступности

server 172.16.29.202 iburst
server 172.16.29.203 iburst
server 172.16.29.204 iburst


2. Разрешите работу в качестве сервера и указать, от каких подсетей принимать запросы: 

Например:

allow 192.168/16
allow 10/8
allow 172.16.0.2

По умолчанию данный параметр закомментирован (#), принимаются запросы из всех доступных подсетей.


3. Перезапустите службу:

systemctl restart chronyd

После перезапуска службы первая синхронизация происходит в течение двух минут.

4. Проверьте состояние службы

systemctl status chronyd

Дополнительно

Посмотр источников для синхронизации времени

chronyc sources

Посмотреть текущее состояние синхронизации

chronyc tracking


CentOS 6 и ниже

За синхронизацию времени отвечает служба ntpd. Она работает одновременно как клиент, так и сервер. Настройки хранятся в файле /etc/ntp.conf . Чтобы добавить/изменить ntp-сервер для синхронизации, используем параметр server. Допускается указание нескольких серверов, служба сама выберет наиболее подходящий по доверию/доступности:

server 10.99.0.1
server 10.99.0.2
server your_ntp_server


После внесения изменения нужно перезапустить службу:

[root@URKHOV ~]# service ntpd restart


Синхронизация может не работать по нескольких причинам.

Смотрим логи. По умолчанию ntp пишет в системный лог /var/log/messages:

[root@URKHOV ~]# tail /var/log/messages
May 25 16:40:13 URKHOV ntpd[25343]: sendto(10.99.0.1) (fd=-1): Bad file descriptor
May 25 16:40:13 URKHOV ntpd[25343]: sendto(10.99.0.2) (fd=-1): Bad file descriptor
May 25 16:41:16 URKHOV ntpd[25343]: sendto(10.99.0.2) (fd=-1): Bad file descriptor
[root@URKHOV ~]#


Эта ошибка возникает, если запущено несколько копий ntp и они конфликтуют между собой:

[root@URKHOV ~]# ps aux |grep ntpd
ntp       3498  0.0  0.0  23412  5048 ?        SLs  Apr21   2:36 ntpd -u ntp:ntp -p /var/run/ntpd.pid -g
root     25343  0.0  0.0  24304  5940 ?        SLs  16:38   0:00 ntpd
root     25757  0.0  0.0  63268   824 pts/1    S+   16:40   0:00 grep ntpd
[root@URKHOV ~]#


Убьем лишний процесс:

[root@URKHOV ~]# kill -9 25343
[root@URKHOV ~]#


Ошибка в логах исчезнет, но синхронизация по-прежнему не работает. Тут есть нюанс - служба ntp после перезапуска не пытается немедленно синхронизироваться. Ей требуется определенное время(10-15мин), чтобы проанализировать работу системного таймера и потом выполнить надстройку. Чтоб заставить службу вызвать немедленную синхронизацию, остановим службу и запустим демон с ключами, которые вызовут попытку немедленной синхронизации и выход:

[root@URKHOV ~]# service ntpd stop
[root@URKHOV ~]# ntpd -q -g


Смотрим /var/log/messages и видим ошибку "no reply: clock not set"

Первая мысль - не проходят пакеты через фаерволл. Это можно проверить, запросив статус серверов у службы через утилиту ntpq , если udp-порт 123 открыт, значения reach, delay, offset не должны быть нулевыми:

[root@URKHOV ~]# service ntpd start
[root@URKHOV ~]# ntpq -pn 127.0.0.1
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*mng2.t5.fi      10.99.0.1    2 u  995 1024  377   12.432    0.133   0.276
+ns2.posiona.net 10.99.0.2    2 u  837 1024  377   14.298    0.765   0.089
 LOCAL(0)        .LOCL.                           1 l   32   64  377    0.000    0.000   0.001
[root@URKHOV ~]#


"*" - означает сервер, с которым последний раз была синхронизация.

"+" - можно использовать для синхронизации.

"-' - не рекомендуется для использования

В нашем случае пакеты проходят. Попробуем другой способ ручной синхронизации через утилиту ntpdate, службу ntp предварительно нужно выключить:

[root@URKHOV ~]# service ntpd stop
[root@URKHOV ~]# ntpdate 10.99.0.1
25 May 17:05:54 ntpdate[670]: adjust time server 10.99.0.1 offset -0.000204 sec
[root@URKHOV ~]#


Время синхронизировалось. Дело в том, что утилита ntpdate использует иные механизмы синхронизации времени. Что касается службы, несмотря на то, что обратный ответ от внутренненго сервера приходит(мы это посмотрели через ntpq), служба отказывается принимать данные в качестве достоверного источника точного времени, хотя и явно об этом не сообщает. Это может быть связано с настройками удаленного ntp-сервера, политиками безопасности, если это win-сервер.

Попробуем указать в качестве источника внешний сервер в /etc/ntp.conf:

server 0.centos.pool.ntp.org

Запустим разовую проверку:

[root@URKHOV ~]# ntpd -q -g

Как видим, с этим сервером служба оказалась сговорчивее.

© 1994-2023, ООО «Кристалл Сервис Интеграция».
Все права защищены..

Политика обработки персональных данных