Ошибка 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.