Настройка NTP в CentOS

Теория

Когда сервер Linux загружается, считываются аппаратные часы, также называемые часами реального времени. Эти часы обычно находятся в оборудовании. Обычно это интегральная схема на системной плате, которая полностью не зависит от текущего состояния операционной системы и продолжает работать, даже когда компьютер выключен. С аппаратных часов система получает начальную настройку времени.
Время на аппаратных часах на серверах Linux обычно устанавливается на всемирное координированное время (UTC). UTC - это время, которое одинаково везде на планете, и на основе UTC рассчитывается текущее местное время. (Позже в этой статье вы узнаете, как это работает.)

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

Системное время - это время, которое поддерживается операционной системой и хранится в формате UTC. Приложения, запущенные на сервере, преобразуют системное время в местное время. Местное время - это фактическое время в текущем часовом поясе. В местном времени летнее время (DST) считается таким, чтобы оно всегда показывало точное время для этой системы. Таблица дает обзор различных концепций, которые играют роль в Linux.

КонцепцияОбъяснение
Аппаратные часы

Аппаратные часы, которые находятся на основной плате компьютерной системы
Часы реального времени

Такие же как аппаратные часы
Системное время

Время, которое поддерживается операционной системой
Программные часы

Похоже на системное время
Всемирное координированное время (UTC)

Мировое стандартное время
Летнее время (DST)

Расчет для автоматического изменения времени при переходе на летнее время
Локальное время

Время, которое соответствует времени в текущем часовом поясе

Использование NTP

Как вы узнали, текущее системное время основано на аппаратных часах. Эти аппаратные часы обычно являются частью материнской платы компьютера и могут быть ненадежными. Из-за его ненадежности, это хорошая идея использовать время из более надежного источника.

Вообще говоря, доступны два решения.

Один из вариантов - купить более надежные аппаратные часы. Это могут быть, например, очень точные атомные часы, подключенные напрямую к вашему компьютеру. При использовании таких очень надежных часов гарантируется повышенная точность системного времени. Использование внешних аппаратных часов является распространенным решением, гарантирующим поддержание времени в центре обработки данных, даже если подключение к внешним сетям для временной синхронизации временно недоступно.

Другое и более распространенное решение - настроить сервер на использование сетевого протокола времени (NTP). NTP - это метод поддержания системного времени, предоставляемый через NTP-серверы в Интернете. Это простое решение для обеспечения точного времени для серверов, потому что большинство серверов в любом случае подключены к Интернету.

Настроить сервер для использования времени NTP на CentOS 7 легко, если сервер уже подключен к Интернету. Если это так, файл /etc/chrony.conf настроен со стандартным списком NTP-серверов в Интернете, с которыми следует связаться. Единственное, что нужно сделать администратору, это включить NTP с помощью timedatectl set-ntp 1.

Управление временем в CentOS

Различные команды участвуют в управлении временем в CentOS. В таблице представлен их обзор.

КомандаОписание
dateУправляет местным временем
hwclock
Управляет аппаратным временем
timedatectlРазработано для управления всеми аспектами времени на CentOS

В системе Linux время вычисляется как смещение времени эпохи. Время эпохи - это количество секунд с 1 января 1970 года в UTC. В некоторых журналах (например, /var/log/audit/audit.log) вы найдете метки времени в эпоху, а не в человеческое время. Чтобы преобразовать такую метку времени в человеческое время, вы можете использовать опцию --dateзатем следует строка эпохи, начинающаяся с @:
date --date '@1420987251
Использование времени эпохи также создает потенциальную проблему синхронизации в Linux. В 32-разрядной системе число секунд, которое можно отсчитать в поле, зарезервированном для обозначения времени, заканчивается в 2037 г. (Попробуйте установить время где-то в 2050 г., если вы используете 32-разрядное ядро; оно не будет работать.) 64-битные системы могут обращаться ко времени до далекого двадцать второго века.

Использование date

Команда date позволяет вам управлять системным временем. Вы также можете использовать его для отображения текущего времени в разных форматах. Некоторые общие примеры использования даты перечислены здесь:
  • date Показывает текущее системное время
  • date +%d-%m-%y Показывает текущий системный день месяца, месяц, и год
  • date -s 16:03 Устанавливает текущее время.

Использование hwclock

Команда date позволяет вам установить и показать текущее системное время. Использование команды date не изменит аппаратное время, которое используется в вашей системе. Для управления аппаратным временем вы можете использовать команду hwclock. Команда hwclock имеет много опций, некоторые из которых представляют особый интерес:
  • hwclock -c показывает разницу между аппаратным и системным временем. Вывод этой команды обновляется каждые 10 секунд.
  • hwclock --systohc синхронизирует текущее системное время с аппаратными часами.
  • hwclock --hctosys синхронизирует текущее аппаратное время с системными часами.

Использование timedatectl

timedatectl - новая команда в Linux, которая позволяет вам управлять многими аспектами времени. Как показано ниже, при использовании без аргументов эта команда отображает подробную информацию о текущем времени и дате. Она также отображает часовой пояс, в котором находится ваша система, в дополнение к информации об использовании сетевого времени NTP и информации об использовании DST.
[root@zabbix ~]# timedatectl
      Local time: Mon 2019-09-23 15:41:06 +10
  Universal time: Mon 2019-09-23 05:41:06 UTC
        RTC time: Sun 2019-09-22 11:45:16
       Time zone: Asia/Vladivostok (+10, +1000)
     NTP enabled: n/a
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

Команда timedatectl работает с командой для выполнения временных операций. В таблице представлен обзор соответствующих команд.

Команда

Объяснение
status

Показать текущие настройки времени
set-time TIME

Установить текущее время
set-timezone ZONE 

Установить текущий часовой пояс
list-timezone

Показать список всех часовых поясов
set-local-rtc [0|1] 

Контролировать, будет ли RTC (часы реального времени - это обычно относится к аппаратным часам) работать по местному времени
set-ntp [0|1] 

Включить или выключить NTP

Команда timedatectl была разработана как общее решение для управления временем в Linux. Она имеет некоторые функции, которые предлагаются через другие команды, но цель команды состоит в том, что в конечном итоге она заменит другие команды, используемые для управления настройками времени и даты. Когда timedatectl используется для включения времени NTP, он обращается к процессу chronyd.

На CentOS 7 chrony является решением по умолчанию для управления сетевым временем. NTP все еще может быть реализован через ntpd. Если у вас есть сервисы, которым нужен ntpd, вы можете использовать его, но вы должны понимать, что в этом случае вы не можете использовать команду timedatectl.

Пример настройки даты и времени:
1. Зайдите под рутом и введите date.

2. Теперь введите hwclock и посмотрите, отображаются ли обе команды более или менее одновременно.

3. Введите hwclock -c. Обратите внимание, что это показывает различия между системным временем и временем аппаратного обеспечения гораздо более подробно. Используйте Ctrl + C, чтобы прервать работу команды.

4. Вы только что видели, что текущее время, отображаемое с помощью hwclock -c, относится к эпохе.

5. Используйте date -d '@12345678'  (в которой вы замените 12345678 на время эпохи, которое только что показал hwclock -c), чтобы перевести текущее время эпохи в удобочитаемое время.

6. Введите timedatectl show, чтобы показать текущие настройки времени.

7. Используйте timedatectl list-timezones, чтобы показать список всех определений часовых поясов.

8. Используйте timedatectl set-timezone Europe/Moscow, чтобы установить текущий часовой пояс по Москве.

9. Введите timedatectl show и обратите внимание на различия с предыдущим выводом.

10. Введите timedatectl set-ntp 1, чтобы включить использование NTP. Может появиться сообщение об ошибке "failed to issue method call.". Если вы получили это сообщение, введите yum -y install chrony и повторите попытку.

11. Откройте файл конфигурации /etc/chrony.conf и найдите строки server.
Они используются для указания серверов, которые должны использоваться для синхронизации времени NTP.

12. Введите systemctl status chronyd и убедитесь, что служба chrony запущена и включена. Если это не так, используйте systemctl start chronyd; systemctl enable chronyd.

13. Введите systemctl status -l chronyd и прочитайте информацию о состоянии.

Управление настройками часового пояса

Между серверами Linux время обычно передается по UTC. Это позволяет серверам разных часовых поясов использовать одни и те же настройки времени, что значительно упрощает управление временем в крупных организациях. Однако, чтобы облегчить работу конечных пользователей, необходимо также установить местное время. Для этого необходимо выбрать соответствующий часовой пояс.

В CentOS у вас есть четыре подхода к настройке правильного местного часового пояса:

1. Используйте утилиту system-config-date, как описано в следующем разделе этой статьи.

2. Перейдите в каталог /usr/share/zoneinfo. В этом каталоге вы найдете различные подкаталоги, содержащие файлы для каждого часового пояса, который был определен.
Чтобы установить местный часовой пояс на сервере, вы можете создать символическую ссылку с именем /etc/localtime на соответствующий файл часового пояса. Например, если вы хотите установить местное время на время Владивостока, используйте ln -sf /usr/share/zoneinfo/Russia/Vladivostok/etc/localtime.

3. Используйте утилиту tzselect. Этот инструмент запускает интерфейс, из которого можно выбрать соответствующий регион и локаль.

4. Используйте timedatectl для установки информации о часовом поясе.

Настройка времени в графической среде

Если ваш сервер настроен с графическим интерфейсом, вы можете использовать графический инструмент для управления временем. Для этого выполните следующие действия:
  1. Щелкните текущее время, которое отображается в верхнем правом углу.
  2. На открывшемся экране нажмите Date & Time Settings.
  3. Откроется новый экран. Чтобы получить доступ к параметрам, позволяющим изменить время, нажмите Unlock.
  4. На экране, который вы видите сейчас, вы можете включать и выключать сетевое время и изменять текущую настройку часового пояса, а также текущее время.
Кроме того, вы можете запустить графическую утилиту для управления временем с помощью команды system-config-date.

Добавить комментарий