Какие часы бывают в Linux
Thank you for reading this post, don't forget to subscribe!
Немного теории. В любом компьютере есть два вида часов. Одни аппаратные (ЧРВ — часы реального времени или RTC — real time clock), которые работают даже при выключенном блоке питания, на это у них есть батарейка на материнской плате. Другие программные, то есть часы операционной системы. Показания этих часов могут различаться. При этом программные часы опираются на показания аппаратных при старте операционной системы. А в дальнейшем могут синхронизироваться через интернет с эталонными и корректировать ход аппаратных.
В большинстве случаев если компьютер работает под управлением операционной системой Windows показания аппаратных и программных часов совпадают. В linux же чаще всего аппаратные часы настраивают по гринвичу (времени нулевого меридиана), а программные по необходимому смещению для часового пояса где расположен сервер.
Абсолютное большинство программ (приложений и сервисов) в своей работе опираются на показания системных (программных) часов.
Для чего нужно корректировать часы
- Чтобы избежать вчерашних новостей и публикаций завтрашнего дня. К примеру часы вашего сервера идут по времени Хабаровска, а основные посетители из Европы (разница UTC+11). В такой ситуации вечерний посетитель увидит «завтрашние» даты на сайте. Так как когда в Европе вечер, то в Хабаровске утро следующего дня.
- Чтобы было удобно настраивать задания Cron.
- Чтобы время создания файлов совпадало с фактическим и не вводило Вас в заблуждение.
Как настроить время вашего сервера
Проверим, что показывают аппаратные часы, для чего будем использовать три варианта команды hwclock:
1 2 3 4 5 6 7 |
# hwclock Sun 09 Mar 2014 08:01:03 PM MSK -0.926999 seconds # hwclock --localtime Sun 09 Mar 2014 04:01:16 PM MSK -0.130659 seconds # hwclock --utc Sun 09 Mar 2014 08:01:25 PM MSK -0.411394 seconds |
Приведенный пример для случая когда аппаратные часы идут по UTC, а сервер настроен на Московский часовой пояс. Особых пояснений требует опция —utc вывод времени производится (формируется) с условием, что аппаратные часы идут по времени UTC. То есть показания должны совпадать с желаемым временем на сервере. Опция же —localtime наоборот показывает время аппаратных часов без всяких поправок.
Несколько полезных команд установки времени аппаратных часов
Устанавливаем время аппаратных часов равное системному:
1 |
# hwclock --systohc |
Устанавливаем время системных часов на основании ЧРВ:
1 |
# hwclock --hctosys |
Устанавливаем время равное указанному:
1 |
# hwclock --set --date "09 Jan 2012 14:11" |
Значение временной зоны
Данные временной зоны для аппаратных часов в Centos хранятся в файле /etc/sysconfig/clock.
Для московской временной зоны в случае когда аппаратные часы идут по UTC он имеет следующее содержимое:
1 2 3 4 |
ZONE="Europe/Moscow" UTC=true ARC=false |
Где ZONE — это наш часовой пояс, UTC говорит о том, что аппаратные часы сервера идут по универсальному времени UTC, ARC в значении false — значит используется нормальное значение века (эпохи) UNIX.
Подробнее по конфигурации файла /etc/sysconfig/clock в CentOS можно почитать в официальной документации.
Системные часы операционной системы CentOS
Для системных (программных) часов CentOS используется команда date.
1 2 3 4 5 |
# date Tue Mar 18 16:08:04 MSK 2014 # date --utc Tue Mar 18 12:08:10 UTC 2014 |
Приведенный пример для случая когда операционная система использует Московский часовой пояс. Здесь опция —utc говорит, что необходимо показать время нулевого меридиана, то есть без поправок на часовой пояс.
Изменение временной зоны (часового пояса) в CentOS
Для изменения времени системных часов, если их показания не соответствуют необходимому региону, необходимо проделать следующие нехитрые операции.
В начале, сделаем резервную копию существующего файла временной зоны (часового пояса).
1 2 |
# mv /etc/localtime /etc/localtime.bak |
Это хорошая практика, когда вы делаете резервные копии оригинальных файлов конфигурации ?
Затем, создаем ссылку на необходимую временную зону.
1 |
ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime |
(в нашем случае /usr/share/zoneinfo/Asia/Bishkek)
где Europe/Moscow необходимая временная зона. Полный список доступных часовых поясов смотрим в каталоге /usr/share/zoneinfo/.
При необходимости можно установить значение времени вручную:
1 2 |
# date MMDDhhmm |
где MM – месяц, DD – день, hh – час, mm – минуты.
То есть чтобы задать, к примеру, 18 марта 20 часов 15 минут, нужно ввести следующее:
1 2 |
# date 03182015 |
Более подробно о команде date, можно почитать в мануале, выполнив команду:
1 |
# man date |
Настройка сервера времени ntp
Со временем часы могут убегать или отставать, поэтому время от времени их нужно синхронизировать с эталонными. Для этого в CentOS используется демон ntpd.
Установим демон ntpd если его нет в системе:
1 |
# yum install ntp |
Однократно синхронизируем время:
1 |
# ntpdate pool.ntp.org |
Если получили что-то вроде the NTP socket is in use, exiting — значит ntpd демон уже запущен. В этом случае остановим его:
1 |
# service stop ntpd |
Настраиваем работу ЧРВ в BIOS на время по UTC:
1 |
# hwclock --systohc --utc |
Этой командой мы присвоили значение времени аппаратных часов равным системному времени. Как вы помните, системные часы мы синхронизировали командами выше.
Проверим содержимое файла /etc/sysconfig/clock чтобы система после загрузки правильно выставляла местное время. Для Москвы он должен содержать следующее:
1 2 3 4 |
ZONE="Europe/Moscow" UTC=true ARC=false |
Настраиваем демон ntpd на автозагрузку при старте операционной системы:
1 |
# chkconfig ntpd on |
Запускаем демон синхронизации времени:
1 |
# service ntpd start |
Проверяем системное время командой:
1 |
# date |
Оно должно совпадать с реальным.
Проверим, синхронизируется ли системное время с серверами эталонного времени (ntp server) и все ли там в порядке командой ntpq -p:
1 2 3 4 5 6 7 8 9 |
# ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== test.danzuck.ch 162.23.41.56 2 u 1 64 1 12.280 -23.298 0.031 fw.ams.nl.alexs 82.197.221.30 4 u 2 64 1 2.086 -19.002 0.000 ntp0.mediamatic 193.0.0.229 2 u 1 64 1 0.998 -19.938 0.000 elara.mysnip.de .INIT. 16 u - 64 0 0.000 0.000 0.000 |
Демон ntpd включает в ядре Linux режим «11 minute mode». В этом режиме каждые 11 минут синхронизируются системные и аппаратные часы. По-умолчанию он (режим «11 minute mode») выключен и включается только когда какой-то сервис попросит включить этот режим. Демон ntpd как раз его и (режим «11 minute mode») включает. Так что дополнительно синхронизировать аппаратные часы по значению системных нет необходимости.
P.S. Теперь системные и аппаратные часы вашего сервера будут автоматически синхронизироваться с эталонными серверами и всегда показывать точное время.
В появившейся таблице мы видим сервера с которыми синхронизирован наш ntpd.
remote
Имя удаленного NTP-сервера.
refid
Указывает, откуда каждый сервер получает время в данный момент.
st
Stratum это число от 1 до 16, указывающее на точность
сервера. Единица означает максимальную точность, 16 -- сервер
недоступен. Уровень вашего сервера будет равен уровню наименее точного
удаленного сервера плюс 1.
poll
Интервал между опросами (в секундах). Значение будет изменяться
между минимальной и максимальной частотой опросов. В начале
интервал будет небольшим, чтобы синхронизация происходила
быстро. После того как часы синхронизируются, интервал начинает
увеличиваться, чтобы уменьшить трафик и нагрузку на популярные
сервера времени.
reach
Восьмеричное представление массива из 8 бит, отражающего
результаты последних восьми попыток соединения с сервером. Бит
выставлен, если удаленный сервер ответил.
delay
Количество времени (в секундах) необходимого для получения
ответа на запрос "который час? ".
offset
Наиболее важное поле. Разница между временем локального и
удаленного серверов. В ходе синхронизации это значение должно
понижаться, указывая на то, что часы локальной машины идут все
точнее.
jitter
Дисперсия (Jitter) -- это мера статистических отклонений от
значения смещения (поле offset) по нескольким успешным парам
запрос-ответ. Меньшее значение дисперсии предпочтительнее,
поскольку позволяет точнее синхронизировать время.
Значение знаков перед именами серверов
- Означает, что локальный сервис NTP не предпочитает этот сервер
+ Означает, что локальный сервис NTP предпочитает этот сервер
x Отмечает плохой хост
* Указывает на текущий наиболее предпочтительный сервер
=======================================
Что такое NTP-сервер?
NTP означает сетевой протокол времени.
Это сетевой протокол, который синхронизирует часы между компьютерными системами по сети.
Он будет сохранять одинаковое время (точное время) для всех систем, которые подключены к NTP-серверу через NTP или клиент Chrony.
NTP обычно может поддерживать время с точностью до десятков миллисекунд по общедоступному Интернету и может достигать точности, превышающей одну миллисекунду, в локальных сетях при идеальных условиях.
Он использует протокол пользовательских дейтаграмм (UDP) на порту номер 123 для отметок времени отправки и получения.
Это клиент / серверное приложение.
Он отправляет и получает временные метки с использованием протокола пользовательских дейтаграмм (UDP) на порту 123.
Что такое NTP-клиент?
NTP-клиент синхронизирует свои часы с сетевым сервером времени.
Что такое Chrony ?
Chrony — это замена NTP-клиента.
Он может синхронизировать системные часы с большей точностью и может быть особенно полезен для систем, которые не подключены к сети все время.
Зачем нам нужен NTP сервер?
Чтобы все серверы в вашей организации были синхронизированы с точным временем выполнения заданий, основанных на времени.
Чтобы прояснить это, я расскажу вам сценарий.
Скажем, например, у нас есть два сервера (Server1 и Server2).
Server1 обычно выполняет пакетные задания в 10:55, а затем Server2 необходимо выполнить другое задание в 11:00 на основании отчета о завершении задания Server1.
Если обе системы используют в разное время (если одна система опережает другие, другие отстают от этой конкретной), мы не сможем это сделать.
Для этого нам нужно настроить NTP.
Надеюсь, это убрало ваши сомнения по поводу необходимости NTP.
В этой статье мы будем использовать следующую настройку, чтобы проверить работу NTP
- NTP-сервер: HostName: CentOS7.itisgood.ru, IP: 192.168.1.8, ОС: CentOS 7
- NTP-клиент: HostName: Ubuntu18.itisgood.ru, IP: 192.168.1.5, ОС: Ubuntu 18.04
СТОРОНА NTP-СЕРВЕРА: Как установить NTP-сервер на Linux?
Не существует разных пакетов для NTP-сервера и NTP-клиента, так как это модель клиент / сервер.
Пакет NTP доступен в официальном репозитории дистрибутива, поэтому используйте его для установки.
Для системы Fedora используйте DNF для установки ntp.
1 2 |
$ sudo dnf install ntp |
Для систем Debian / Ubuntu используйте команду APT-GET или APT для установки ntp.
1 2 |
$ sudo apt install ntp |
Для систем на основе Arch Linux используйте Pacman для установки ntp.
1 2 |
$ sudo pacman -S ntp |
Для систем RHEL / CentOS используйте команду YUM для установки ntp.
1 2 |
$ sudo yum install ntp |
Для системы openSUSE Leap используйте Zypper для установки ntp.
1 2 |
$ sudo zypper install ntp |
Как настроить NTP-сервер на Linux?
После установки пакета NTP убедитесь, что вы раскомментировали следующую конфигурацию в файле /etc/ntp.conf на стороне сервера.
По умолчанию конфигурация NTP-сервера основана на X.distribution_name.pool.ntp.org.
Если вы хотите, вы можете использовать конфигурацию по умолчанию или изменить ее в соответствии с вашим местоположением (в зависимости от страны), посетив https://www.ntppool.org/zone/@
Скажем например.
Если вы находитесь в Индии, то ваш NTP-сервер будет 0.in.pool.ntp.org, и он будет работать для большинства стран.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# vi /etc/ntp.conf restrict default kod nomodify notrap nopeer noquery restrict -6 default kod nomodify notrap nopeer noquery restrict 127.0.0.1 restrict -6 ::1 server 0.asia.pool.ntp.org server 1.asia.pool.ntp.org server 2.asia.pool.ntp.org server 3.asia.pool.ntp.org restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap driftfile /var/lib/ntp/drift keys /etc/ntp/keys |
Мы разрешили только клиентам подсети 192.168.1.0/24 получать доступ к NTP-серверу.
Поскольку брандмауэр по умолчанию включен в дистрибутивах на основе RHEL 7, разрешите использование сервера / службы ntp.
1 2 |
# firewall-cmd --add-service=ntp --permanent # firewall-cmd --reload |
Для системы на основе Debian нам нужно запустить ntp вместо ntpd.
1 2 3 |
# service ntpd restart # chkconfig ntpd on |
Для systemctl систем
1 2 3 |
# systemctl restart ntpd # systemctl enable ntpd |
СТОРОНА КЛИЕНТА NTP: Как установить клиент NTP в Linux?
Как я уже упоминал ранее в этой статье.
Не существует специального пакета для NTP-сервера и клиента. Итак, установите этот же пакет на клиенте.
Для системы Fedora используйте DNF для установки ntp.
1 2 |
$ sudo dnf install ntp |
Для систем Debian / Ubuntu используйте команду APT-GET или APT для установки ntp.
1 2 |
$ sudo apt install ntp |
Для систем на основе Arch Linux используйте Pacman для установки ntp.
1 2 |
$ sudo pacman -S ntp |
Для систем RHEL / CentOS используйте команду YUM для установки ntp.
1 2 |
$ sudo yum install ntp |
Для системы openSUSE Leap используйте Zypper для установки ntp.
1 |
$ sudo zypper install ntp |
Я установил и настроил NTP-сервер на CentOS7.itisgood.ru, добавив те же самые настройки на все клиентские машины.
1 2 3 4 5 6 7 8 9 |
# vi /etc/ntp.conf restrict default kod nomodify notrap nopeer noquery restrict -6 default kod nomodify notrap nopeer noquery restrict 127.0.0.1 restrict -6 ::1 <strong>server CentOS7.itisgood.ru</strong> driftfile /var/lib/ntp/drift keys /etc/ntp/keys |
Для системы на основе Debian нам нужно запустить ntp вместо ntpd.
1 2 3 |
# service ntpd restart # chkconfig ntpd on |
Для systemctl систем.
Для системы на основе Debian нам нужно запустить ntp вместо ntpd.
1 2 3 |
# systemctl restart ntpd # systemctl enable ntpd |
Подождите несколько минут после перезапуска службы NTP, чтобы получить время синхронизации с NTP-сервером.
Выполните следующие команды, чтобы проверить состояние синхронизации сервера NTP в Linux.
1 2 3 4 5 6 7 |
# ntpq –p или # ntpq -pn remote refid st t when poll reach delay offset jitter ============================================================================== *CentOS7.itisgood 133.243.238.163 2 u 14 64 37 0.686 0.151 16.432 |
Выполните следующую команду, чтобы получить текущий статус ntpd.
1 2 3 4 |
# ntpstat synchronised to NTP server (192.168.1.8) at stratum 3 time correct to within 508 ms polling server every 64 s |
Наконец, запустите команду date
1 2 |
# date Tue Mar 26 23:17:05 CDT 2019 |
Если вы наблюдаете значительное смещение по времени на выводе NTP, выполните следующую команду, чтобы синхронизировать часы вручную с NTP-сервера.
Убедитесь, что ваш NTP-клие неактивен, когда вы выполняете команду.
1 |
# ntpdate –uv CentOS7.itisgood.ru |