Синтаксис и основные опции
Согласно официальной информации, доступной из справочного руководства (команда man date), синтаксис команды date следующий:
date . . . date YY]
Если дать команду date без аргументов или если аргументы начинаются с символа «+», то по-умолчанию будет выведено текущие значения даты и времени. В ином случае производится установка даты и времени, передаваемые в аргументах в каком-либо из форматов. Например, для установки времени введите команду
date MMDDhhmmYYYY.ss
где
MM — Месяц
DD — День,
hh — часы в 24-часовом формате,
mm — минуты,
YYYY — 4 цифры года,
ss — секунды.
Пример
date 03082019
Ниже мы боле подробно рассмотрим параметры ввода даты и времени.
Следующая команда выводит информацию о текущих дате и времени в форматированном виде:
$ date '+Дата: %m/%d/%y%nВремя: %H:%M:%S'’
Как видно, символ «+» позволяет печатать установленные (текущие) значения, а следующее за ним выражение задаёт формат вывода этих значений. Шаблон подстановки «%n» здесь служит для переноса строки. Все остальные шаблоны подстановки используются для выборки соответствующих компонент времени: месяцы, дни, часы, минуты и т. д. Само же выражение должно заключаться в кавычках, если в нём присутствуют пробельные символы.
Параметры CC, YY и .ss в синтаксисе date означают две последние цифры года, век и секунды (от 0 до 59) соответственно. И эти параметры не являются обязательными. Для того, чтобы устанавливать дату и время с помощью команды date, необходимы права суперпользователя.
В следующей таблице приводится описание основных опций команды date:
Опция | Значение |
-d, —date=STRING | Вычисляет день недели для заданной даты в качестве STRING. Дата задаётся в формате ггммдд. |
-f, —file=DATEFILE | То же самое, что и -d, но для исходных данных используется содержимое из файла FILE. |
-r, —reference=FILE | Определяет время последней модификации файла FILE. |
-s, —set=STRING | Устанавливает время/дату, заданные строкой STRING. |
-u, —utc, —universal | Использование формата |
А что на счёт WordPress?
В то время как важность IndexNow уже была признана конкурентами, WordPress, похоже, воздерживается от принятия нового протокола. Возможно, WordPress это реализует, но последние семь месяцев разработчики обсуждают это предложение без видимого решения
Тем не менее, Microsoft сделала IndexNow открытым исходным кодом в WordPress для включения в основную CMS. Если WP одобрит этот код, веб-мастер может автоматически подписаться на отправку своих URL-адресов в IndexNow.
В ответ на вопрос разработчиков WordPress Microsoft заявила, что владельцы сайтов смогут выбирать, в какие поисковые системы отправлять свои изменения и новые URL-адреса. То есть теоретически мы можем заблокировать определенные поисковые системы от получения данных.
Согласно билету разработчика WP, в котором представитель Microsoft написал:
Navigating Basic Time Commands
To view the time on your server, you will use the command . Any user can run this command to print out the date and time:
Typically, your server will generate an output with the default UTC time zone.
UTC is Coordinated Universal Time, the time at zero degrees longitude. While this may not reflect your current time zone, using Universal Time prevents confusion when your infrastructure spans multiple time zones.
If you want to change your time zone, however, you can use the command.
First, run this command to generate a list of available time zones:
A list of time zones will print to your screen. You can press to page down, and to page up. Once you find the correct time zone, make note of it then type to exit the list.
Next, you can set the time zone with by replacing the highlighted portion with the time zone you found in the list. You’ll need to use with to make this change:
You can verify your changes by running again:
The time zone abbreviation will reflect the newly chosen value.
Now that you’ve practiced checking the clock and setting time zones, you can confirm that your time is being synchronized properly in the next section.
Синхронизация времени
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, который реализует только клиентскую часть, фокусируясь только на запросе времени с одного удалённого сервера. Он должен быть более чем подходящим для большинства установок.
Время и дата в 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 | Ваш часовой пояс |
С просмотром в консоли текущего времени сервера разобрались, переходим к его настройке.
Преимущества IndexNow для вебмастеров
IndexNow полезен для веб-мастеров, поскольку снижает нагрузку на сервер. Поисковым системам больше не нужно сканировать сайты, чтобы проверить, были ли обновлены веб-страницы. Это сокращает время, необходимое для обнаружения и индексации контента.
Уменьшение нагрузки на сервер помогает ему работать оптимально без дополнительного бремени чрезмерного обслуживания веб-страниц, которое уже есть у поисковых систем.
В конечном счете, это приносит пользу всему миру, сокращая затраты на поиск и индексацию энергии и помогая уменьшить негативное воздействие глобального изменения климата.
Примечания к объявлению Bing:
Как включить синхронизацию времени в Linux
К счастью, большинство Linux-дистрибутивов по умолчанию синхронизируют время. Если вы не замечали, что часы вашего компьютера расходятся с часами телефона, тогда наверняка ваш дистрибутив использует NTP-клиент / демон.
Синхронизировать время в Linux с systemd
В большинстве дистрибутивов Linux используется systemd, а вместе с ним и демон systemd-timesyncd. Это означает, что у вас уже есть NTP-клиент, предварительно установленный в Ubuntu, Debian, Fedora, Arch Linux, openSUSE, Manjaro и других. На этих дистрибутивах (и других основанных на них, например, Elementary ОС, Zorin OS) чтобы проверить, включена ли синхронизация NTP запустите команду:
Если на выходе отображается «
Network time onyes», часы вашего компьютера автоматически синхорнизируются через NTP. Иногда вы можете также заметить
NTP synchronized — это означает, что часы синхронизируются с помощью другого инструмента.
Если вы видите
Network time onno, выполните следующую команду, чтобы включить синхронизацию времени NTP.
Это все, что вам нужно сделать в этих дистрибутивах.
Синхронизировать время в Linux без systemd
Для примера возьмем MX Linux. Запуск команды timedatectl показывает, что сетевое время включено, но systemd-timesyncd не используется. Как же синхронизировать время в таких дистрибутивах без systemd?
Проверьте с помощью следующей команды, которую вы можете использовать в любой другой операционной системе Linux.
В MX Linux вы увидите результат, подобный тому, что вы видите на следующем снимке экрана.
Из этого сообщения журнала видно, что клиент «ntpdate» запускался один раз. Это популярный клиент, установленный по умолчанию во многих дистрибутивах Linux. Он легкий и время от времени запрашивает только NTP-серверы. Он не работает в фоновом режиме и запускается сценариями, синхронизируется, а затем завершается.
Это означает, что время не синхронизируется с высокой точностью (например, миллисекунды или микросекунды), но оно достаточно точно для большинства.
В других операционных системах вы можете увидеть «ntpd», который является демоном, постоянно работающим в фоновом режиме и очень точным. Чем больше он работает, тем точнее время.
Если по какой-то причине вы хотите установить
ntpили
ntpdate в операционных системах с systemd, сначала отключите ntp-клиент systemd.
Конечно, приведенная выше команда не нужна в несистемных дистрибутивах.
Установить клиент ntpdate
Это подходит для домашних компьютеров, ноутбуков и других устройств, которые не постоянно подключены к Интернету.
На Debian, Ubuntu, Linux Mint, Zorin и других дистрибутивах, основанных на них, запустите:
На всех вышеперечисленных дистрибутивах на основе Debian он настроен по умолчанию на запуск после того, как обнаружит новое сетевое соединение. Вы можете принудительно синхронизировать время, если отключитесь от сети и подключитесь снова.
В Fedora ntpdate устарела, поэтому рекомендуется вместо этого использовать демон ntpd (см. Следующую главу). То же самое рекомендуется для всех других дистрибутивов по двум причинам:
- Иногда они не включают ntpdate в отдельный пакет, а связывают его с ntpd из следующего раздела.
- Они не автоматизируют запуск ntpdate автоматически при каждом сетевом подключении. Вы должны вставить ntpdate самостоятельно в скрипт, который автоматически запускается после подключения к сети.
В этом случае имеет смысл установить ntpd, как указано в следующей главе.
Установить ntpd Daemon
В Debian, Ubuntu, Zorin, Mint и других дистрибутивах, основанных на Debian или Ubuntu, запустите:
1 | sudo apt install ntp |
Эти дистрибутивы сразу запускают ntpd, а затем автоматически запускают его при каждой загрузке; никаких дальнейших действий от вас не требуется.
На Fedora установите с помощью:
На CentOS запустите:
Для Arch Linux используйте команду:
И на openSUSE введите:
После этого включите службу для запуска при загрузке, а затем запустите ее:
1 |
sudo systemctl enable ntpd sudo systemctl start ntpd |
В других дистрибутивах, которые работают без systemd, вам, возможно, придется выполнить следующие команды:
1 |
sudo update-rc.dntpd enable sudo service ntpd start |
Если вы получите сообщение об ошибке, что ntpd не существует, замените «ntpd» на «ntp» в приведенных выше командах. В некоторых дистрибутивах файлы службы демона ntpd называются по-разному.
Стандарт времени
Есть два основных стандарта времени: местное (локальное) время (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 без редактирования реестра.
Изменить это поведение можно так же, как описано выше.
Примеры команд даты 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 the computer. The system has a tiny quartz crystal and a battery that keeps time when the system disconnects from a network.
Set Hardware Clock to Sync to Local Timezone
To have the Real-Time Clock synchronize to your local time zone, enter:
You may get an error in this mode, since updating the hardware clock to the local time zone is unsupported.
Set the Hardware Clock to Sync with UTC
Set the 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. Verify the change manually with the command.
Troubleshooting
Is NTP installed?
Run dpkg-query --list ntp\* and look for ntp-simple (pre 7.04) or ntp. The ntpdate and ntp-doc packages may also be useful.
Which configuration file is it using?
By default NTP uses /etc/ntp.conf. If /etc/ntp.conf.dhcp exists then the NTP daemon assumes you’re using DHCP to redefine the NTP settings and it uses that file instead.
How do I configure NTP to use DHCP
Your DHCP server must be configured to supply NTP servers (man dhcpd.conf may be helpful).
Your client must be configured to use the supplied NTP servers. To do this, add ntp-servers to the request (or even require) line in /etc/dhcp3/dhclient.conf. You may wish to use the default and prepend features as well to provide default/additional NTP servers. Please see man dhclient.conf and man dhcp-options for details.
Is NTP running?
NTP most commonly ‘fails’ if it cannot resolve the servers in its configuration file at startup (this can happen if DNS isn’t available during boot). Also, if NTP is unable to keep the local clock reasonably accurate it gives up and terminates (see below).
Try sudo /etc/init.d/ntp status to check if NTP is running, and sudo /etc/init.d/ntp restart to restart it if necessary.
I have various systems on unreliable networks so I use a simple script to bounce NTP if needed:
$ cat /etc/cron.hourly/BOUNCE-NTP #!/bin/sh /usr/bin/ntpq -np | /bin/grep '^\*' > /dev/null || ( /usr/bin/ntpq -np ; /etc/init.d/ntp restart )
Which servers are you using?
Run grep ^server /etc/ntp.conf or grep ^server /etc/ntp.conf.dhcp to figure out which servers you’re trying to use
If your network or ISP have an NTP server they should be listed here. Failing that, try ntp.ubuntu.com and/or the NTP pool servers (http://www.pool.ntp.org/). 3 or 4 servers is plenty, and don’t use a server without permission (see http://en.wikipedia.org/wiki/NTP_vandalism).
Can these servers be resolved?
If host $servername fails then you may have DNS issues that need to be fixed ($servername is the name of a server listed in your configuration file, see above).
Can these servers be reached?
If ntptrace $servername fails then you may have routing/firewall issues that need to be fixed ($servername is the name of a server listed in your configuration file, see above). NTP uses UDP port 123, make sure these packets can are properly NAT-ed through your gateway if necessary.
What’s NTP up to?
ntpq --numeric --peers
—numeric removes the DNS lookups. You can leave it off, but don’t be surprised if the resolved names don’t match names in the ntp.conf file.
Ideally you want a * and a few +‘s in the fist column and a reach of 377 (see )
delay is in milliseconds. It should be < 1 for local network servers, < 10 for ISP servers over DSL and ideally < 100 for wireless. offset is in milliseconds and is the current best guess of the time difference between your system and the server. The smaller the better! jitter is an estimate the the local clock frequency error. The smaller the better. If it’s consistently high then your system may be drifting (see below)
NTP attempts to fix your local clock to keep accurate time. If your local clock drifts too fast (usually HW problems or IRQ lockups or somesuch) then NTP either keeps resetting your clock or gives up and terminates. Fix the drift problem and NTP will behave.
Решение проблем
Часы показывают значение, которое не является ни UTC, ни местным временем
Это может быть вызвано рядом причин. Например, если ваши аппаратные часы используют местное время, но настроен на то, чтобы считать, что они используют UTC, в результате смещение вашего часового пояса относительно UTC будет применено дважды, что приведёт к неправильным значениям местного времени и UTC.
Чтобы заставить ваши часы показывать правильное время, а также записать правильный UTC в ваши аппаратные часы, выполните следующие шаги:
- Настройте ntpd (включать его как службу не обязательно).
- Установите правильный .
- Запустите для ручной синхронизации ваших часов с сетью, игнорируя большие отклонения между локальным UTC и сетевым UTC.
- Запустите для записи текущего системного времени в аппаратные часы.
Установка и настройка времени в Ubuntu
Ручная настройка времени в ubuntu обычно не представляет какой-то особой сложности, если понимаешь, как это сделать. Для того, чтобы самостоятельно установить время через консоль, необходимо запустить date через sudo со следующими параметрами:
sudo date 03261721 password for user: Fri 26 Mar 2021 05:21:00 PM UTC
В данном случае при обновлении времени мы подразумевали:
- 03 — месяц март;
- 26 — текущее число дня месяца;
- 17 — часы;
- 21 — минуты;
То есть базовый формат утилиты date следующий — MMDDhhmm.
В моих примерах время отображается в 12-ти часовом формате на английском языке. Для того, чтобы перевести его в 24-х часовой формат, нужно изменить в locale параметр LC_TIME. Именно там стоит привязка к формату. Например, в локали en_US по умолчанию используется 12-ти часовой формат, а в ru_RU или en_GB 24-х часовой.
Для того, чтобы дата в консоли отображалась на русском языке, а время в 24-х часовом формате, достаточно сформировать locale ru_RU и изменить только формат времени, оставив все остальное на английском языке.
sudo locale-gen ru_RU.UTF-8 sudo update-locale LANG=en_US.UTF-8 LC_TIME="ru_RU.UTF-8"
После этого необходимо завершить сеанс пользователя и залогиниться снова, чтобы изменение формата вступило в силу.
Еще один способ установки даты и времени с помощью timedatectl:
sudo timedatectl set-time "2021-03-26 18:09:30"
При этом вы можете получить ошибку: Failed to set time: Automatic time synchronization is enabled. Утилита timedatectl более умная, нежели date. Она проверяет, не настроена ли у вас автоматическая синхронизация времени. И если настроена, то вручную не дает его изменить. В целом, это правильный подход, хотя и может создавать неудобства. В этом случае вам надо отключить синхронизацию и только потом установить время руками. Эту тему мы будем рассматривать ниже отдельно.