Настройка 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 для установки информации о часовом поясе.
Настройка времени в графической среде
Если ваш сервер настроен с графическим интерфейсом, вы можете использовать графический инструмент для управления временем. Для этого выполните следующие действия:- Щелкните текущее время, которое отображается в верхнем правом углу.
- На открывшемся экране нажмите Date & Time Settings.
- Откроется новый экран. Чтобы получить доступ к параметрам, позволяющим изменить время, нажмите Unlock.
- На экране, который вы видите сейчас, вы можете включать и выключать сетевое время и изменять текущую настройку часового пояса, а также текущее время.