Ошибка Failed to set time automatic time synchronization is enabled Centos 7

GNOME Automatic Date & Time не использует службу ntp, которую можно установить через sudo apt-get install ntpПоэтому остановка или удаление службы не помогает ошибка Failed to set time automatic time synchronization is enabled в Centos 7 устраняется с помощью команды

timedatectl set-ntp 0

и команда для включения

timedatectl set-ntp 1

пример  через timedatectl status

% timedatectl status
      Local time: Do 2015-10-08 18:17:17 CEST
  Universal time: Do 2015-10-08 16:17:17 UTC
        RTC time: Do 2015-10-08 16:17:17
       Time zone: Europe/Berlin (CEST, +0200)
     NTP enabled: no
NTP synchronized: yes
 RTC in local TZ: no
      DST active: yes
 Last DST change: DST began at
                  So 2015-03-29 01:59:59 CET
                  So 2015-03-29 03:00:00 CEST
 Next DST change: DST ends (the clock jumps one hour backwards) at
                  So 2015-10-25 02:59:59 CEST
                  So 2015-10-25 02:00:00 CET

% timedatectl set-ntp 1

% timedatectl status
      Local time: Do 2015-10-08 18:17:35 CEST
  Universal time: Do 2015-10-08 16:17:35 UTC
        RTC time: Do 2015-10-08 16:17:35
       Time zone: Europe/Berlin (CEST, +0200)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: yes
 Last DST change: DST began at
                  So 2015-03-29 01:59:59 CET
                  So 2015-03-29 03:00:00 CEST
 Next DST change: DST ends (the clock jumps one hour backwards) at
                  So 2015-10-25 02:59:59 CEST
                  So 2015-10-25 02:00:00 CET

 

Hwclock: настройка аппаратного (системного) времени

Чтобы проверить аппаратное время в Linux используется утилита hwclock:

  • hwclock --localtime — проверка аппаратного времени без поправки
  • hwclock --utc – проверка времени с условием, что аппаратные часы идут по времени UTC
# hwclock --localtime
Wed 27 Nov 2019 11:28:28 AM +06 -1.012225 seconds
# hwclock --utc
Wed 27 Nov 2019 05:28:30 PM +06 -0.045476 seconds

Чтобы установить аппаратное время равное системному времени, выполните команду:

# hwclock --systohc

Чтобы установить конкретное время, выполните:

# hwclock --set --date "27 Nov 2019 17:30"

Ручная настройка времени в CentOS

В Linux за программное время отвечает утилита date или timedatectl. Если вызывать утилиту date без параметров, она покажет текущее время на сервере:

# date
Wed Nov 27 17:40:56 +06 2019

Если вы хотите выставить время вручную, можно воспользоваться утилитой date с дополнительными ключами:

# date MMDDhhmm

Где MM – месяц, DD — день, hh – час, mm – минуты.

Например:

# date 11261740

Для получения расширенной информации о дате, времени, поясе, синхронизации, настройках перехода на сезонное (летнее/зимнее) время (DST), используется утилита timedatectl. Она дает более подробную информацию о настройках времени на сервере.

Timedatectl также позволяет изменить время:

# timedatectl set-time '2019-11-27 17:51:00'

Синхронизация времени с помощью chrony, ntpdate

Способов синхронизации времени в centos существует как минимум три:

  • ручной с помощью утилиты ntpdate
  • автоматический при помощи сервиса ntp или chrony
  • автоматический через утилиту из пакета systemd - timesyncd.

Рассмотрим сначала вариант ручной однократной синхронизации при помощи программы ntpdate. Она позволяет разово синхронизировать локальное время с эталонным сервером времени в интернете. Подобных эталонов существует великое множество. Мы для примера воспользуемся одним из них - pool.ntp.org

Запускаем синхронизацию времени:

# ntpdate pool.ntp.org
21 Oct 11:50:37 ntpdate[8473]: adjust time server 85.21.78.8 offset -0.001664 sec

Если получите ошибку

-bash: ntpdate: command not found

значит утилита у вас не установлена. Установить ее можно из базового репозитория.

# yum install ntpdate

Это актуально только для 7-й версии, в В CentOS 8 ntp и ntpdate убрали из репозиториев. Для синхронизации времени можно использовать только chrony. Ее мы рассмотрим ниже.

Утилита ntpdate провела синхронизацию, в результате которой к моему системному времени было добавлено 0.001664 секунды для приближения к эталонному. Если в результате работы синхронизации вы получаете ошибку: no server suitable for synchronization found то попробуйте в работе утилиты использовать непривилегированный порт. По-умолчанию ntpdate работает по 123 порту. Если он закрыт на фаерволе, то помочь в синхронизации поможет следующий параметр:

# ntpdate -u pool.ntp.org

Если у вас запуск ntpdate завершается ошибкой - the NTP socket is in use, exiting, значит у вас уже установлена и запущена служба ntpd, которая заняла udp порт, необходимый для работы ntpdate. Установкой и настройкой этой службы мы и займемся далее.

Как я уже сказал, в CentOS 8 служба ntpd и утилита ntpdate стали недоступны в базовых репозиториях. Возможно, их как-то удастся установить из сторонних репозиториев, но большого смысла нет. Можно воспользоваться программой chrony. Ставим ее:

# yum install chrony

Запускаем и добавляем в автозагрузку.

# systemctl start chronyd
# systemctl enable chronyd
# systemctl status chronyd

Программа стартовала и уже выполнила синхронизацию с источниками точного времени в интернете. Каких-то особых настроек для получения точного времени больше не надо. Служба будет постоянно работать и выполнять синхронизацию. Проверим это с помощью timedatectl.

# timedatectl status

systemd-timesyncd

Отдельно пару слов о службе systemd-timesyncd, которая в системах с systemd выступает в роли простого sntp клиента, в отличие от chrony и ntp, которые в том числе могут работать в качестве сервера времени. В Debian служба systemd-timesyncd присутствует в составе systemd и ей можно пользоваться, что достаточно удобно. Легкий полновесный клиент, который по дефолту есть в составе системы.

Я сначала не мог понять, что с systemd-timesyncd в Centos. Команда вроде есть и работает, но как оказалось, это просто обертка над chrony. Реально команда управляет именно chrony и без него не работает. Без него вы получите ошибку, при попытке активировать компонент timesyncd.

# timedatectl set-ntp true
Failed to set ntp: NTP not supported

Если вернете chrony в систему, то timedatectl будет запускать именно его. Немного погуглив, я понял в чем тут дело. Red Hat компилирует systemd без компонента systemd-timesyncd, предлагая по дефолту именно chrony.