Стандарт времени
Есть два основных стандарта времени: местное (локальное) время (localtime) и Всемирное координированное время (Coordinated Universal Time, UTC). Местное время зависит от текущего часового пояса, а время UTC — это глобальное время, которое одинаково для всех и не зависит от часовых поясов. UTC иногда называют гринвичским временем (GMT), хотя это немного разные вещи.
Стандарт, который будет использоваться в аппаратных часах, выбирается операционной системой. По умолчанию Windows использует местное время, macOS использует UTC, а другие UNIX и UNIX-подобные системы используют разные стандарты. ОС, использующая стандарт UTC, обычно рассматривает аппаратные часы как UTC и вносит в них поправку для установки времени ОС при загрузке в соответствии с часовым поясом.
Если на машине установлено несколько операционных систем, все они будут получать текущее время от одних и тех же аппаратных часов: рекомендуется настроить их на использование UTC, чтобы избежать конфликтов. В противном случае, если аппаратные часы установлены на местное время, сразу несколько операционных систем могут попытаться скорректировать его, например, после перехода на летнее/зимнее время, что приведёт к избыточной коррекции; проблемы могут также возникнуть при перемещении между различными часовыми поясами и использовании одной из операционных систем для сброса системных/аппаратных часов.
Значение аппаратных часов можно прочитать и изменить с помощью команды .
Вы можете узнать текущий стандарт, который Arch использует для работы с аппаратными часами, с помощью следующей команды:
$ timedatectl | grep local
RTC in local TZ: no
Переход на использование местного времени для аппаратных часов:
# timedatectl set-local-rtc 1
Переход на использование UTC для аппаратных часов:
# timedatectl set-local-rtc
Эти команды автоматически обновят аппаратные часы и файл , дополнительные действия не требуются.
Во время запуска ядра, в момент загрузки драйвера RTC, значение системных часов может быть установлено по аппаратным часам. Произойдет ли это, зависит от аппаратной платформы, версии ядра и опций сборки ядра. Если это происходит, то в этот момент последовательности загрузки время аппаратных часов принимается за UTC и значение (N=0,1,2,..) будет установлено в 1.
Примечание:
- Использование требует активной шины D-Bus. Поэтому использование этой команды под chroot (например, во время установки) может оказаться невозможным. В таких случаях можно вернуться к команде hwclock или использовать systemd-nspawn вместо chroot.
- Если файл отсутствует, systemd по умолчанию считает, что аппаратные часы используют UTC.
UTC в Microsoft Windows
Это делается простым изменением в реестре: откройте и добавьте ключ со значением здесь:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation\RealTimeIsUniversal
Это можно сделать одной командой в командной строке, запущенной от имени администратора:
reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /d 1 /t REG_DWORD /f
Также можно создать файл и импортировать его в реестр двойным щелчком мыши:
Windows Registry Editor Version 5.00 "RealTimeIsUniversal"=dword:00000001
Если Windows попросит обновить часы в связи с изменениями DST, позвольте ей это сделать. Часы останутся в UTC, как и ожидалось, скорректируется только отображаемое время.
После этого и может понадобиться обновить.
Если у вас проблемы со смещением времени, попробуйте переустановить и заново установить часовой пояс:
# timedatectl set-timezone Europe/Moscow
Исторические примечания
В очень старых версиях Windows это всё не работает из-за их багов. Более конкретно,
- В 64-битных версиях Windows 7 и старых сборках Windows 10 существовала ошибка, из-за которой требовалось значение со значением вместо . Эта ошибка была исправлена в новых сборках, и теперь работает только .
- До Vista SP2 существовала ошибка, которая сбрасывала часы на местное время после возвращения из ждущего или спящего режима.
Для этих операционных систем рекомендуется использовать местное время.
UTC в Ubuntu
Если Ubuntu на любом диске обнаруживает Windows в процессе установки, то для аппаратных часов она автоматически начинает использовать местное время. Очевидно, это сделано специально, чтобы позволить новым пользователям Linux опробовать Ubuntu на своих компьютерах с Windows без редактирования реестра.
Изменить это поведение можно так же, как описано выше.
Настройка клиента Linux
Для клиентов можно выбрать 2 стратегии настройки — с помощью ntp или утилиты ntpdate.
NTP
Устанавливаем ntp:
Ubuntu / Debian:
apt-get install ntp
CentOS / Red Hat:
yum install ntp
В настройка /etc/ntp.conf в качестве сервера оставляем только наш локальный сервер, например:
server 192.168.0.15
Остальные pool и server удаляем или комментируем.
Перезапускаем NTP:
systemctl restart ntp || service restart ntp
ntpdate
Утилита командной строки выполняет разовую синхронизацию. Чтобы автоматизировать процесс, добавляем задание в cron:
crontab -e
0 0 * * * /usr/sbin/ntpdate 192.168.0.15
* в данном примере задание будет выполняться раз в день в 00:00. /usr/sbin/ntpdate — полный путь расположения утилиты, в разных системах может быть разным — проверить стоит командой which ntpdate.
Настройка сервера ntp в CentOS 7
Сервер времени ntp использует в своей работе одноименный протокол — Network Time Protocol, которому для работы необходим UDP порт 123. Так что перед установкой и настройкой службы времени убедитесь, что на фаерволе открыт этот порт.
Устанавливаем сервер ntp:
Теперь отредактируем файл конфигурации /etc/ntp.conf , удалив все лишнее:
Параметр | Описание |
server | Список серверов для синхронизации времени |
driftfile | Задает адрес файла, в котором хранится история изменений времени во время синхронизации. Если по каким-то причинам синхронизация времени с внешними источниками станет невозможна, служба времени изменит системные часы в соответствии с записями в этом файле. |
restrict 127.0.0.1 |
Указывает, что пользоваться нашим сервером времени можно только непосредственно с локального интерфейса. Если вам необходимо разрешить другим компьютерам в вашей локальной сети синхронизировать время с текущей машины, то укажите в данном параметре адрес вашей сети, например: restrict 192.168.10.0 mask 255.255.255.0 |
restrict default nomodify notrap nopeer noquery | Параметры указывают на то, что клиентам данного сервиса времени запрещено изменять его настройки, получать его статус. Они могут только забрать с него значения точного времени. |
disable monitor | Данный параметр повышает безопасность, предотвращая использования одной из уязвимостей сервиса ntpd, которую можно использовать для проведения DDoS атак. |
logfile | Указывает путь к файлу с логами сервиса |
После завершения редактирования файла настроек запускаем службу синхронизации времени:
Проверяем запустился ли сервер:
Все в порядке, служба слушает положенный порт 123. Проверим еще на всякий случай системные логи centos:
Все в порядке, сервер запущен и полностью готов к работе.
Теперь настроим автозапуск ntp вместе с загрузкой centos:
Наблюдать за работой службы ntp можно с помощью команды ntpq -p:
Что значат все эти данные:
remote | Адрес удаленного эталона времени, с которого была синхронизация |
refid | Указывает, откуда каждый эталон получает точное время. Это могут быть другие сервера времени, система GPS и другое |
st | Stratum (уровень) это число от 1 до 16, которое указывает на точность эталона. 1- максимальная точность, 16 — сервер недоступен. Уровень вашего сервера будет равен уровню наименее точного удаленного эталона плюс 1. |
poll | Интервал в секундах между опросами |
reach | Восьмеричное представление массива из 8 бит, отражающего результаты последних восьми попыток соединения с эталоном. Бит выставлен, если удаленный сервер ответил. |
delay | Время задержки ответа на запрос о точном времени |
offset | Разница между вашим и удаленным сервером |
jitter | Дисперсия (Jitter) — это мера статистических отклонений от значения смещения (поле offset) по нескольким успешным парам запрос-ответ. Чем меньше значение дисперсии, тем лучше, поскольку позволяет точнее синхронизировать время. |
Погрешность часов
Нет ничего идеального. В том числе и часов. Время на любых часах хоть немного но отличается от реального. Одними из наиболее точных считаются атомные часы. Кварцевые часы, используемые в компьютерах, также не являются абсолютно точными, зато имеют относительно постоянную погрешность.
При установке аппаратных часов с помощью рассчитывается новое значение дрейфа в секундах в день. Значение дрейфа вычисляется с помощью разницы между новым установленным значением и значением аппаратных часов непосредственно перед установкой, с учётом значения предыдущего значения дрейфа и времени последней установки аппаратных часов. Новое значение дрейфа и время, когда часы были установлены, записываются в файл , перезаписывая предыдущие значения. Таким образом, аппаратные часы могут быть скорректированы с учётом дрейфа при выполнении команды ; это также происходит при выключении, но только если демон включен, поэтому в Arch-системах, использующих systemd, этого не происходит.
Примечание: Если время аппаратных часов устанавливается повторно менее чем через 24 часа после предыдущей установки, дрейф не пересчитывается, поскольку считает прошедший период времени слишком коротким для точного расчёта дрейфа.
Если аппаратные часы продолжают терять или набирать время с большим шагом, возможно, что был записан некорректный дрейф (но это применимо только в том случае, если запущен демон hwclock). Это может произойти, если вы неправильно установили время аппаратных часов или ваш не совпадает со стандартом времени в Windows или macOS. Значение дрейфа можно сбросить, сначала удалив файл , а затем установив правильное время аппаратных и системных часов. Затем следует проверить правильность используемого стандарта времени.
Примечание: Если вы хотите использовать значение дрейфа, хранящееся в , даже при использовании systemd (например, вы не можете или не хотите использовать NTP), вы должны регулярно вызывать , например, создав задание cron.
Программные часы очень точны, но, как и большинство часов, не идеально точны и могут дрейфовать. Хотя и редко, системные часы могут потерять точность, если ядро пропускает прерывания. Существуют некоторые инструменты для повышения точности программных часов; смотрите .
Examples
date
Running date with no options will output the system date and time, as in the following output:
Thu Feb 8 16:47:32 MST 2001
date -s "11/20/2003 12:48:00"
Set the system date and time to November 20, 2003, 12:48 PM.
date "+DATE: %m/%d/%y%nTIME: %H:%M:%S"
Outputs the date and time in the following format:
DATE: 02/08/01TIME: 16:44:55
ls -al > output_$(date +"%m_%d_%Y")
In bash, this command will generate a directory listing with ls, and redirect the output to a file which includes the current day, month, and year in the file name. It does this using bash , running the date command in a subshell and inserting that output into the original command.
Настройка сервера времени ntp
Со временем часы могут убегать или отставать, поэтому время от времени их нужно синхронизировать с эталонными. Для этого в CentOS используется демон ntpd.
Установим демон ntpd если его нет в системе:
# yum install ntp
Однократно синхронизируем время:
# ntpdate pool.ntp.org
Если получили что-то вроде the NTP socket is in use, exiting — значит ntpd демон уже запущен. В этом случае остановим его:
# service stop ntpd
Настраиваем работу ЧРВ в BIOS на время по UTC:
# hwclock --systohc --utc
Этой командой мы присвоили значение времени аппаратных часов равным системному времени. Как вы помните, системные часы мы синхронизировали командами выше.
Проверим содержимое файла /etc/sysconfig/clock чтобы система после загрузки правильно выставляла местное время. Для Москвы он должен содержать следующее:
ZONE="Europe/Moscow" UTC=true ARC=false
# chkconfig ntpd on
Запускаем демон синхронизации времени:
# service ntpd start
Проверяем системное время командой:
# date
Оно должно совпадать с реальным.
Проверим, синхронизируется ли системное время с серверами эталонного времени (ntp server) и все ли там в порядке командой ntpq -p:
# 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. Теперь системные и аппаратные часы вашего сервера будут автоматически синхронизироваться с эталонными серверами и всегда показывать точное время.
Using timedatectl to Control the System Time and Date
Display Current Date and Time with timedatectl
To display the current time and date information use the command:
The output provides local and universal time, timezone, and informs you if the synchronization process is enabled.
Sync Time to NIST Atomic Clock
You can set your Ubuntu system to synchronize to the NIST atomic clock:
If you need to turn off NTP synchronizing to be able to adjust the time and date manually, use:
Note: NTP stands for Network Time Protocol.
How to Change the Time
This simple command sets the time to your specifications. For it to work, the automatic time synchronization needs to be disabled as discussed previously.
The time format should be in HH:MM:SS (Hours, Minutes, Seconds).
The same command is used to define the date as well:
The date should be formatted as YYYY-MM-DD (Year, Month, and Day).
How to Set a Timezone in Ubuntu
The command additionally allows you to synchronize your systems with a timezone of your choosing. These are the steps:
1. To list out the names of the timezones:
2. Find the location closest to you, then enter the following:
3. Replace Region/Location with a name from the timezone list.
The timezone list is extensive. You may want to filter the list by keyword, using :
The | is a pipe symbol, usually next to the Enter key. You can substitute keyword for any keyword you wish, such as America, Asia, or New_York. If you get an error, double-check your spelling and make sure that you are using capital letters correctly.
How to Set Universal Time (UTC) in Ubuntu
UTC stands for Coordinated Universal Time and is used for scientific calculations and synchronizing between timezones across the globe. You can synchronize your system by entering the following command:
There is no immediate output; however, you can check if the settings applied by using .
Note: GMT and Zulu Time are often used to refer to UTC. They are equivalent terms when fractions of a second are not relevant.
Время и дата в Ubuntu Server
Как я уже сказал во введении, следить за системным временем в ubuntu server нужно в обязательном порядке, как и в любом другом сервере. Начальные настройки вы делаете еще во время установки системы. Далее вам может понадобиться либо изменение часового пояса, либо более точная настройка и синхронизация часов.
Кстати, если вам интересно узнать, почему я лично использую именно ubuntu server, а не какой-то другой linux дистрибутив, то читайте мой обзор и сравнение ubuntu с другими системами.
Особенно актуальной тема системного времени становится, когда вы арендуете сервера где-то в другой стране с отличным от вашего часового пояса. По умолчанию, у хостера скорее всего будет установлен его часовой пояс. Иногда я забываю это проверить и замечаю только тогда, когда возникают какие-то проблемы. А вот список проблем, которые могут теоретически возникнуть, если на сервере будет неправильное время:
- При просмотре логов или разборе инцидентов придется сначала переводить время в свой часовой пояс или формат, чтобы адекватно разобраться в ситуации.
- Если у вас настроена какая-то интеграция с доменной структурой Windows, расхождение по времени может приводить к проблемам.
- При использовании cron и автоматических заданий для выполнения, неправильное время на сервере может удивить вас тем, что ваши задачи будут выполнены не тогда, когда вы этого ожидаете.
- Если на сервере работает web сайт или почтовый сервис, время публикации постов или отправления писем будет неправильным, что создаст неудобство пользователям.
Это список, что первым делом приходит на ум. Думаю, его можно сильно расширить, если потратить чуть больше времени. Но не вижу в этом смысла. Думаю, и так понятно, что часы на сервере должны всегда показывать точное время в нужном вам часовом поясе. Этим мы и займемся далее.
Утилита date
Посмотреть время в командной строке Ubuntu можно с помощью команды date.
date
В данном случае вы видите следующую информацию:
Fri | День недели, пятница |
26 | Число месяца |
Mar | Месяц, март |
2021 | Год |
02:01:59 | Время в формате час:минута:секунда |
PM | Время суток в 12-ти часовом формате, PM — после полудня |
UTC | Часовой пояс |
Для того, чтобы посмотреть время в 24-х часовом формате в консоли ubuntu, можно использовать дополнительный ключ к команде, добавив туда еще и саму дату:
date +"%H:%M %d/%m/%Y" 14:09 26/03/2021
Таким образом, с помощью параметров форматирования, вы можете выбирать любой формат времени для отображения. Традиционно, командная строка linux позволяет очень гибко выполнять различные действия с помощью своих утилит. Например, вы можете посмотреть не только время и дату, но и вывести в консоль номер дня недели, добавив дополнительный ключ %j:
date +"%H:%M %d/%m/%Y %j" 14:13 26/03/2021 085
Узнать время сервера в unix формате можно вот так:
date '+%s' 1616768183
Если у вас часовой пояс отличный от UTC, а вы хотите увидеть время именно в этом часовой поясе, то воспользуйтесь следующим ключом команды:
date --utc
Очень удобно использовать утилиту date с различными параметрами в скриптах, чтобы получать время в удобном для вас формате. Например, когда вы используете время в названиях файлов бэкапов при их создании. Вот несколько примеров наиболее часто используемых форматов отображения даты и времени:
date +%Y-%m-%d 2021-03-26 date +%H:%M:%S 14:36:35 date +%Y-%m-%d_%H:%M:%S 2021-03-26_14:36:42
Утилита timedatectl
В составе systemd есть своя утилита для просмотра и настройки времени через консоль — timedatectl. Далее пример с ее участием для просмотра системного времени сервера ubuntu.
timedatectl
Local time | Локальное время данного сервера |
Universal time | Время в часовом поясе UTC |
RTC time | Время на аппаратных часах |
Time zone | Ваш часовой пояс |
С просмотром в консоли текущего времени сервера разобрались, переходим к его настройке.
Time Synchronization using NTP
This page describes methods for automatically keeping your computer’s time accurate. This is extremely useful for servers, and is also recommended for desktop machines.
Network Time Protocol (NTP) is a UDP/IP protocol for synchronizing time over a network connection. Basically a client requests the current time from a server, and then uses the servers response to set its own clock.
Beyond this simple description, there is a lot of complexity. There are multiple tiers of NTP servers, with the tier one NTP servers connected to atomic clocks (often via GPS), and tier two and three servers spreading the load of actually handling requests across the internet. The client software is a lot more complex than you might think as it has to factor communication delays, and adjust the time in a way that does not affect the other processes that run on the system. Luckily all that complexity is hidden from the user.
Using the GUI
This is how to enable NTP time synchronization using the GUI (Graphical User Interface).
-
Click on the System menu on the top panel, go into the Administration sub-menu, and click on Date and Time.
-
Select the configuration option Keep synchronized with Internet servers
- You may get a dialog box informing you that NTP support has to be installed.
-
After selecting Install NTP Support it will download the needed files.
-
You are now finished and you can click Close or you can customize the NTP servers (default is ntp.ubuntu.com) that your computer uses to synchronize with by choosing Select Servers.
Command Line ntpd
ntpdate is a bit of a blunt instrument as it can only adjust the time once a day in one big correction. The ntp daemon ntpd is far more subtle as it calculates the drift of your system clock and continuously adjusts it in small increments. Using ntpd there are no large corrections that could lead to inconsistent logs for instance. The cost is a little processing power and memory, but for a modern system this is negligible.
To setup ntpd in versions of Ubuntu 7.04 and higher
sudo apt-get install ntp
To set up ntpd pre Ubuntu 7.04:
sudo apt-get install ntp-simple
Примеры команд даты UNIX и синтаксис
Синтаксис:
date date "+format" |
date
date «+format»
Отображение текущей даты и времени
Введите следующую команду:
date |
date
Примеры результатов:
Tue Oct 27 15:35:08 CDT 2009
При выполнении без аргументов команда date показывает текущую дату и время
Установить текущее время
Вы должны запустить команду от имени пользователя root. Чтобы установить текущее время на 05:30:30, введите:
date 0530.30 |
date 0530.30
Предупреждение : пожалуйста, не меняйте дату и время Unix, когда сервер работает с более чем одним пользователем (многопользовательский режим) или критически важными службами, так как это может привести к неожиданному поведению.
Установить дату
Синтаксис следующий:
Установите дату 25 октября, 00:45, введите:
date 10250045 |
date 10250045
Снова вы должны запустить команду от имени пользователя root. В этом примере установите текущую дату и время на 15 октября 2009 г., 04:30 введите:
date --set="20091015 04:30" |
date —set=»20091015 04:30″
Введите следующую команду:
date '+DATE: %m/%d/%y%nTIME:%H:%M:%S' |
date ‘+DATE: %m/%d/%y%nTIME:%H:%M:%S’
Примеры результатов:
DATE: 10/27/09 TIME:15:50:44
Попробуйте следующие примеры:
date "+%m/%d/%y" date "+%Y%m%d" date +'%-4.4h %2.1d %H:%M' |
date «+%m/%d/%y»
date «+%Y%m%d»
date +’%-4.4h %2.1d %H:%M’
Понимание строк формата даты
На странице руководства по команде даты :
- %a – Отображает сокращенное название дня недели для локали.
- %A – Отображает полное название дня недели для локали.
- %b – Отображает сокращенное название месяца для локали.
- %B – Отображает полное название месяца языкового стандарта..
- %c – Отображает дату и время, соответствующие языку (по умолчанию)..
- %C – Отображает первые 2 цифры четырехзначного года в виде десятичного числа (00-99). Год делится на 100 и округляется до целого числа.
- %d – Отображает день месяца в виде десятичного числа (01-31). В двузначном поле 0 используется в качестве начального заполнения пробела.
- %D – Отображает дату в формате, эквивалентном %m/%d/%y.
- %e – Отображает день месяца в виде десятичного числа (1-31). В двузначном поле пробел используется как начальный пробел.
- %h – Отображает сокращенное название месяца для локали (синоним% b
- %H – Отображает час (24-часовой формат) в виде десятичного числа (00-23).
- %I – Отображает час (12-часовой формат) в виде десятичного числа (01-12).
- %j – Отображает день года в виде десятичного числа (001-366).
- %k – Отображение 24-часовых часов в виде числа с выравниванием по правому краю и заполненного пробелами (0–23).
- %m – Отображает месяц года в виде десятичного числа (01-12)
- %M – Отображает минуты в виде десятичного числа (00-59)
- %p – Отображает эквивалент AM или PM для локали.
- %r – Отображает 12-часовое время (01-12) в формате AM-PM; в локали POSIX он эквивалентен %I:%M:%S %p.
- %S – Отображает секунды в виде десятичного числа (00–59).
- %T – Отображает 24-часовые часы (00–23) в формате, эквивалентном ЧЧ: ММ: СС ( HH:MM:SS.)
- %w – Отображает день недели в виде десятичного числа в диапазоне 0-6 (воскресенье = 0). См. Дескриптор поля% u.
How to Sync Hardware Clock
RTC stands for Real-Time Clock, another name for the hardware clock in your computer. Your system has a tiny quartz crystal and a battery that keeps time at times when the system disconnects from a network.
Set Hardware Clock to Sync to Local Timezone
To have your Real-Time Clock synchronize to your local timezone enter:
You may get an error in this mode, since updating the hardware clock to the local timezone is unsupported.
Set the Hardware Clock to Sync with UTC
If necessary, you can set your hardware clock to synchronize with UTC by entering the following command:
As with the previous command, there is no confirmation that the change has applied. You need to verify the change manually by using the command.
Ошибки синхронизации времени
TIME_ERROR: 0x2041: Clock Unsynchronized
Иногда в логе /var/log/ntp.log или системном логе /var/log/syslog вы можете наблюдать ошибку — kernel reports TIME_ERROR: 0x2041: Clock Unsynchronized
На нее можно не обращать внимание, так как реально это не ошибка, а информационное сообщение. Нам просто сообщают о том, что в момент страта службы ntp, ядро linux еще не синхронизировало время
the NTP socket is in use, exiting
Если при запуске синхронизации времени с помощью ntpdate вы видите ошибку — the NTP socket is in use, exiting, то это значит, что у вас уже запущена служба ntp. Для того, чтобы не было конфликтов при изменении времени, должно работать что-то одно, либо ntpdate, либо ntp, но не оба одновременно. Чтобы эта ошибка исчезла, достаточно просто остановить ntp и запустить ntpdate еще раз.
no server suitable for synchronization found
Еще одна популярная ошибка, которая может возникнуть при запуске ntpdate. Она означает, что не получается по какой-то причине установить соединение с сервером времени. В общем случае это означает, что есть какие-то сетевые проблемы, но не обязательно. Вы можете попробовать запустить ntpdate c ключом -u. Он означает, что будет использован локальный не 123-й порт udp, как обычно, а другой из непривилегированного диапазона. Иногда это помогает, так как многие провайдеры из-за известной уязвимости протокола ntp блокируют исходящий 123 порт.
ntpdate -u pool.ntp.org
Служба ntp не запускается после загрузки сервера
Если ntp не стартует после загрузки сервера, то связано это может быть в первую очередь с тем, что не отключена служба timesyncd. Отключите ее и проверьте еще раз:
sudo timedatectl set-ntp no
Ubuntu меняет время и часовой пояс в bios
Убунта имеет дурную привычку при синхронизации времени устанавливать в bios часовой пояс UTC. В общем случае это не доставляет проблем, но если у вас установлена параллельно еще какая-то система на компьютере, то это может создавать проблемы. Чтобы Ubuntu не трогала часы в bios, необходимо выполнить следующую команду:
sudo timedatectl set-local-rtc 1
Какое время бывает в Linux?
Для поддержания времени имеется в Linux есть команда date, и у неё есть множество других замечательных возможностей, о каких владельцы UNIX-систем могут и не догадываться. Серверные и системные часы должны указывать верное время. Время от времени часы на компьютере могут сбиваться по различным причинам, время сможет быть установлено изначально неправильно или неправильно выбран часовой пояс.
Немного теории. В любом компьютере есть два вида часов. Одни аппаратные (ЧРВ — часы настоящего времени или RTC — real time clock), которые работают даже при выключенном блоке кормления, на это у них есть батарейка на материнской плате. Другие программные, то есть часы (прибор для определения текущего времени суток и измерения продолжительности временных интервалов в единицах, меньших, чем одни сутки) операционной системы. Сведения этих часов могут различаться. При этом программные часы опираются на показания аппаратных при старте операторной системы. А в дальнейшем могут синхронизироваться через интернет с эталонными и корректировать ход аппаратных.
В большинстве ситуации если компьютер работает под управлением операционной системой Windows показания аппаратных и программных часов сходят. В linux же чаще всего аппаратные часы настраивают по гринвичу (времени нулевого экватора), а программные по необходимому смещению для часового пояса где расположен сервер. Абсолютное большинство прог (приложений и сервисов) в своей работе опираются на показания системных (программных) часов.
Синхронизация системного времени с RTC[править]
Linux kernelправить
При наличии синхронизации с NTP-сервером ядро каждые 11 минут обновляет время в RTC. Начиная с 3.10, из ядра выпилили код, который пытался обновлять в RTC только минуты и секунды, чтобы обновление работало независимо от часового пояса (но в этом случае не могло быть исправлено расхождение более чем на 15 минут). В результате, при использовании синхронизаторов, умеющих сообщать ядру о наличии синхронизации, ядро получило возможность выставить значение RTC в UTC в соответствии с текущим значением времени, что внесло некоторую путаницу.
Проверить, что функция синхронизации может быть активирована, можно посредством команды
zgrep "HCTOSYS\|SYSTOHC" /proc/config.gz
пакет hwclockправить
При запуске однократно синхронизирует RTC с системными часами, либо наоборот. В зависимости от параметров в RTC может быть установлено время в UTC, либо локальное. В момент исполнения hwclock создаёт файл /etc/adjtime, в котором записано отклонение RTC от системного времени и какое время (локальное, либо UTC) записано в RTC. При загрузке системное время выставляется относительно RTC по данными из adjtime. Несоответствие значения временной зоны в RTC и в файле adjtime (UTC/LOCAL) приводит к сдвигу системного времени при загрузке. В некоторых случаях (например, при использовании ) можно просто обнулить содержимое /etc/adjtime после использования ( >/etc/adjtime ).
другие ОСправить
Другие ОС тоже могут корректировать значение времени в RTC. Если на компьютере установлено более одной ОС, необходимо производить настройки таким образом, чтобы все ОС корректировали время в RTC одинаковым образом.
Текущее время в системе Linux
Чтобы посмотреть текущее время на вашем сервере linux воспользуйтесь командой date:
alex@ubu:~$ date Ср 13 июл 2022 13:40:27 UTC
В выводе мы видим не только дату и время, но также и часовой пояс. Сейчас вместо часового пояса используется UTC.
Также можно использовать другую команду – timedatectl:
alex@s-ubu:~$ timedatectl Local time: Ср 2022-07-20 07:56:41 UTC Universal time: Ср 2022-07-20 07:56:41 UTC RTC time: Ср 2022-07-20 07:56:41 Time zone: UTC (UTC, +0000) System clock synchronized: yes NTP service: active RTC in local TZ: no
Без опций она покажет текущее время, часовой пояс, а также другую информацию связанную с синхронизацией времени. Например в примере выше видно что время успешно синхронизуется (System clock synchronized: yes) и синхронизация настроена (NTP service: active).
С помощью этой же утилиты (timedatectl) мы будем настраивать часовой пояс и следить за синхронизацией времени, об этом чуть ниже.
Настройка часового пояса в linux
1. Ссылка /etc/localtime
Наиболее популярный и поддерживаемый в большинстве дистрибутивов способ установки часового пояса для всех пользователей — с помощью символической ссылки /etc/localtime на файл нужного часового пояса. Список доступных часовых поясов можно посмотреть командой:
Сначала создайте резервную копию текущего часового пояса:
Для создания символической ссылки используйте команду ln -sf. Файл зоны нужно выбрать из доступных в системе. Например, мой часовой пояс — Украина, Киев, для установки будет использоваться следующая команда:
Теперь можете проверить текущее системное время с помощью утилиты date:
Если у вас установлена утилита rdate можно синхронизировать время с сетью:
Осталось только синхронизировать ваши аппаратные часы с новыми настройками, для этого выполните команду:
Если нужно изменить часовой пояс только для определенной программы или скрипта, просто измените для нее переменную окружения TZ, например:
Эта настройка сохраняется только для текущего сеанса командной оболочки. Чтобы сменить часовой пояс linux для определенного пользователя тоже нужно использовать переменную среды TZ. Только ее нужно добавить в файл ~/.environment. Этот файл читается по умолчанию при входе в систему, а значит переменная будет доступна всем программам:
Готово, теперь вы знаете как выполняется настройка часового пояса linux для определенного пользователя.
2. Настройка с помощью tzdata
Если вы не хотите использовать описанный выше способ, можно воспользоваться специальными утилитами. Вот только в разных дистрибутивах используются свои утилиты. Рассмотрим варианты для самых популярных дистрибутивов.
В Red Hat Linux:
В CentOS и Fedora:
В Slackware или FreeBSD:
В Ubuntu:
В большинстве случаев вы увидите подобное диалоговое окно:
Здесь просто нужно выбрать нужный часовой пояс и нажать кнопку Enter. После этого для окончательного применения настроек нужно будет перезагрузить систему.
3. Настройка с помощью systemd
В systemd есть своя утилита для настройки даты и часового пояса. Чтобы узнать текущее состояние выполните:
Для просмотра всех доступных временных зон выполните такую команду:
А для установки нужного часового пояса используйте команду set-timezone, например, тот же Europe/Kiev:
4. Настройка часового пояса в GUI
В дистрибутиве Ubuntu и других, использующих Gnome, настройка часового пояса Linux может быть выполнена прямо в параметрах системы. Для этого выберите пункт Сведения о системе, затем Дата и время, выберите свое местоположение на карте, или наберите название для поиска в поле ввода:
В KDE аналогично можно установить часовой пояс в настройках системы. Запустите утилиту настроек, откройте пункт Локализация, перейдите в раздел Дата и время, а затем откройте вкладку Часовой пояс:
Остается выбрать часовой пояс в списке и нажать кнопку Применить. Здесь уже изменения должны проявиться моментально.
Синхронизация времени
Network Time Protocol (NTP) — это протокол для синхронизации часов компьютерных систем в сетях передачи данных с коммутацией пакетов и переменной задержкой. Ниже приведены реализации NTP, доступные для Arch Linux:
Chrony — Клиент и сервер, дружественный к роумингу и разработанный специально для систем, которые не находятся в сети постоянно.
ConnMan — Лёгкий сетевой менеджер с поддержкой NTP.
Network Time Protocol daemon — Эталонная реализация протокола, особенно рекомендуемая для использования на серверах времени. Она также может регулировать частоту прерываний и количество тиков в секунду для уменьшения дрейфа системных часов и будет вызывать повторную синхронизацию аппаратных часов каждые 11 минут.
ntpclient — Простой NTP-клиент с интерфейсом командной строки.
NTPsec — Форк NTPd, ориентированный на безопасность.
OpenNTPD — Является частью проекта OpenBSD и реализует как клиент, так и сервер.
sntp — Клиент SNTP, который поставляется вместе с NTPd. Он заменяет ntpdate и рекомендуется в несерверных средах.
systemd-timesyncd — Простой демон SNTP, который реализует только клиентскую часть, фокусируясь только на запросе времени с одного удалённого сервера. Он должен быть более чем подходящим для большинства установок.