Как настроить синхронизацию времени с интернетом?

Аватар пользователя admin

Для синхронизации времени используется протокол NTP. Есть два варианта: поднятие собственного NTP-сервера, который будет в online режиме синхрозировать время по динамическому списку адресов с серверами точного времени и просто периодически (например раз в час) вызывать утилиту ntpdate, где в качестве параметра указывать один из доступных открытых серверов точного времени в Интернете. Последний вариант наиболее прост и не требует никаких настроек, а также обеспечивает довольно хорошую точность.

Откройте /etc/crontab, впишите туда строчку:

16 * * * * root /usr/sbin/ntpdate ntp0.nl.net >/dev/null 2>&1

Поясняю: каждый час в 16 минут, каждый день, каждого месяца, мы запускаем команду /usr/sbin/ntpdate (проверьте по этому ли пути она находится в вашем дистрибутиве Linux) для синхронизации времени с сервером ntp0.nl.net. Оставшийся хвостик ">dev/null 2>&1" говорит о том, что мы не желаем получать никаких сообщений от команды ntpdate. Возможно это не так, тогда можете не указывать его, но учтите, что тогда cron будет каждый час присылать вам письмо о том как прошла синхронизация с сервером.

В дистрибутивах, основанных на RHEL8 (т.е. OracleLinux 8, CentOS 8 и т.д.) такой номер не пройдёт, потому что больше утилита ntpdate в дистрибутиве не поставляется. По идее вы должны настроить и использовать chronyd, запуская его в качестве службы точного времени. Но если вы не хотите использовать chronyd в режиме службы, то его можно вызывать по cron'у аналогично ntpdate:

chronyd -q 'server ntp0.nl.net iburst' >/dev/null 2>&1

Как и в случае ntpdate, которая не сработает если запущен сервер ntpd, указанная выше команда не сработает, если chronyd запущен.

Ну а что делать в случае, когда на машине, где нужное точное время нет выхода в Интернет? Если к данной машине есть SSH доступ с другой машины, которая синхронизирована с сервером точного времени, то можно решить вопрос так:

1. На машине, где есть точное время создаём скрипт /root/scripts/synctime.sh следующего содердимого, где X.X.X.X это IP-адрес той машины, где нам нужно получить точное время:

#!/bin/bash
DA=$(date +%T); ssh root@X.X.X.X date -s${DA}

2. Организуем беспарольное подключение на машину X.X.X.X по ключу.

3. Ставим в крон выполнение скрита, например каждые 10 минут:

*/10 * * * * /root/scripts/synctime.sh

Что происходит. Когда вы запускаете скрипт, он запоминает текущее время, а затем переходит на удалённую машину и устанавливает там это-же время с помощью команды date.

0
Ваш рейтинг: Нет