👋🏻 Привет! С вами снова Merion Academy - платформа доступного IT образования. Сегодня мы поговорим про управление системным временем в Linux. Гооу.
Управление временем, в любой операционной системе, очень тесно связанно с понятием часовой зоны. Ранее мы рассказывали про работу с утилитой настройки часовой зоны tzselect. В данной утилите с помощью мастера настраивали зону. Но, по сути, утилита нам выдала только переменную для настройки и описание, как настроить для постоянного использования. Можно пойти несколькими путями:
- TZ=’Europe/Moscow’ - задать переменную
- export TZ – экспортировать данную переменную.
- Для того, чтобы применились параметры нужно перелогинится или перезагрузиться.
И после этого мы можем посмотреть текущую TZ (timezone) в файле - cat /etc/timezone
Вывод будет таким: Europe/Moscow
Второй путь это использовать утилиту timedatectl:
- timedatectl list-timezones - смотрим доступные временные зоны
- sudo timedatectl set-timezone Europe/Moscow
Значение времени в операционных системах определяется 4 частями:
- Значение времени
- Стандарт времени или универсальное время
- Часовой пояс
- Переход на летнее время
Для любой операционной системы есть 2 вида часов – это системные время, которое работает в рамках операционной системы с кучей параметров и аппаратные часы, работа которых определяется схемой на материнской плате и поддерживаются эти часы в работе, благодаря батарейке на материнской плате. Аппаратные часы после включения сервера или компьютера передают свое значение времени операционной системе, а далее система уже сама работает с часами. Аппаратные часы по факту нужны только для старта операционной системы. В настоящее время этот момент стал не столь важным, т.к. практически все сервера имеют доступ в интернет и могут со специальными сайтами синхронизировать время. В случае работы операционной системы на виртуальной машине, время синхронизируется с материнской машиной.
Как мы в прошлой статье уже рассматривали, есть утилита для управления и изменения системного времени - date, а есть утилита hwclock для того, чтобы посмотреть аппаратное время. Для работы данной утилиты необходимы права суперпользователя - sudo hwclock
Вот такой вывод получается, у нас в примере виртуализация на ESXI vmware и виртуализация позволяет синхронизировать часы дочерней операционной системы с аппаратными часами материнского сервера. В вашем же случае, если операционная система будет развернута на Virtualbox, то синхронизации этой происходить не будет (только при старте виртуальной машины) и будет отображаться разница во времени в результате вывода команды. Далее операционная система виртуальной машины и материнского хоста идут независимо друг от друга.
Хотелось бы отметить, что время важно не только для самой операционной системы, но и так же для взаимодействия с другими серверами, например, при использовании авторизации с помощью протокола Kerberos, в котором сервис генерирует токены опираясь на метку времени в операционной системе и, если будет слишком большое расхождение между серверами, токен не будет принят. Исходя из этого команду hwclock можно использовать и для установки времени.
sudo hwclock --set --date=[”нужное_время”] – нужное время задаем в виде dd/mm/yyyy hh:mm
То есть мы можем задать любое аппаратное время. Синхронизация пройдет только при старте операционной системы в нашем случае. Для синхронизации времени одних, часов с другими необходимо выполнить команду sudo hwclock -w.
Но в таком формате синхронизировать время не удобно, в настоящее время практически на всех серверах используется автоматическая синхронизация времени по протоколу NTP.
Данный протокол, обеспечивает синхронизацию системного времени с удаленным сервером в интернете. NTP протокол на транспортном уровне работает, через UDP на 123 порту. В интернете есть такой проект, как NTP Pool Project у которого есть сервера точного времени. Его страничка https://www.ntppool.org/ru/, по данной страничке можно подобрать ближайший к вам сервер точного времени и сделать настройку на него своего сервера или группы серверов.
Вот сервера, актуальные для России:
server 0.ru.pool.ntp.org
server 1.ru.pool.ntp.org
server 2.ru.pool.ntp.org
server 3.ru.pool.ntp.org
Для разовой синхронизации можно использовать следующую утилиту, предварительно установив ее:
sudo ntpdate [адрес_сервера]
В нашем случае получится следующее:sudo ntpdate 0.ru.pool.ntp.org
В результате время синхронизировалось, и утилита показала расхождение, которое было.
Теперь настроим автоматическую синхронизацию времени для этого необходимо установить ntpd демон. Делается это стандартным способом.
sudo apt-get install ntp -y
И отредактировать файл /etc/ntp.conf. Данный демон умеет и сам раздавать время в сети, мы можем настроить другие сервера на синхронизацию с ним, но сейчас необходимо просто настроить синхронизацию текущего сервера с временем сервера в интернете - sudo nano /etc/ntp.conf.
Добавляем сервера в файл, сохраняем и перезапускаем демона - sudo service ntp restart.
И мы можем посмотреть с какими серверами теперь наш сервер может синхронизироваться: ntpdq -pn
Получим вот такой вывод сервером с которыми у нас будет происходить синхронизация.
--
До встречи на нашей образовательной платформе.
Merion Academy - платформа доступного IT образования.