Важным параметром в эксплуатации любого сервера является корректно настроенное время и его своевременная синхронизация. Как выполнить смену часового пояса в ubuntu в случае его изменения или неверного указания во время установки – одна из тем этой статьи. Также я расскажу про установку и использование программ для синхронизации времени и настройку службы точного времени ntp.
Время и дата в 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 | Ваш часовой пояс |
С просмотром в консоли текущего времени сервера разобрались, переходим к его настройке.
Ручная настройка времени в ubuntu обычно не представляет какой-то особой сложности, если понимаешь, как это сделать. Для того, чтобы самостоятельно установить время через консоль, необходимо запустить date через sudo со следующими параметрами:
sudo date 03261721 [sudo] 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. Она проверяет, не настроена ли у вас автоматическая синхронизация времени. И если настроена, то вручную не дает его изменить. В целом, это правильный подход, хотя и может создавать неудобства. В этом случае вам надо отключить синхронизацию и только потом установить время руками. Эту тему мы будем рассматривать ниже отдельно.
Установка и настройка часового пояса в Ubuntu
Непосредственно со временем разобрались, рассмотрим теперь настройку временной зоны. Как посмотреть установленный часовой пояс, мы уже разобрались выше. Теперь разберем, как его изменить или просто задать, если ранее этого не сделали и у вас по умолчанию стоит UTC.
Установить часовой пояс можно с помощью утилит — tzselect и timedatectl. С их же помощью можно перед этим посмотреть список доступных зон. Например, так:
timedatectl list-timezones
Вы увидите длинный список временных зон, состоящий из 348 строк. Его можно будет скролить, либо сразу ограничить вывод нужным вам диапазоном.
timedatectl list-timezones | grep Europe
После того, как выбрали зону, изменяем текущий часовой пояс.
sudo timedatectl set-timezone Europe/Moscow
или с помощью tzselect:
tzselect
Мы выполнили изменение часового пояса в ubuntu как минимум двумя разными способами. Не забудьте после этого на всякий случай проверить установленную timezone. Расскажу про еще один способ, как это можно сделать в консоли. После настройки тайм зоны, на нее создается символьная ссылка от файла /etc/localtime в директорию /usr/share/zoneinfo.
ls -la /etc/localtime lrwxrwxrwx 1 root root 35 мар 26 18:19 /etc/localtime -> ../usr/share/zoneinfo/Europe/Moscow
Меняя эту ссылку, можно так же изменять часовой пояс.
Синхронизация времени с помощью ntpdate, timedatectl
После того, как вы настроили правильную дату и нужный часовой пояс, стоит поработать над тем, чтобы часы всегда показывали точное значение минут и часов. Для этого надо настроить синхронизацию времени. Тут традиционно для linux есть несколько способов и вариантов настройки.
Первый и самый простой способ синхронизации времени в ubuntu — воспользоваться известной утилитой ntpdate.
sudo apt install ntpdate
В качестве параметра ntpdate принимает адрес сервера точного времени, с которого будет произведена синхронизация локальных часов. Я предлагаю воспользоваться популярным пулом серверов точного времени — pool.ntp.org.
sudo ntpdate pool.ntp.org
Пул автоматически выбрал сервер точного времени, с которым мы синхронизировали свои часы. Один из способов автоматизации этого процесса является запуск ntpdate через cron. Но это не очень удобное решение, так как есть более эффективные способы. Например, с помощью локальной службы ntp или chrony, а так же компонента systemd — timesyncd.
После установки системы вам стоит проверить, а не запущена ли у вас уже синхронизация времени с помощью timesyncd. Проверяем:
timedatectl timesync-status
Так и есть. В большинстве современных дистрибутивов, где установлена systemd, уже запущена timesyncd. Параметры этой службы находятся в конфигурационном файле /etc/systemd/timesyncd.conf, где можно посмотреть, какой сервер используется для синхронизации времени и в случае необходимости, заменить. В Ubuntu это ntp.ubuntu.com. Большого смысла менять его на другой сервер нет. Если только вы не хотите синхронизировать время с какого-то своего локального сервера. Как это сделать, я расскажу отдельно ниже.
Клиент ntp
Если вас по какой-то причине не устраивает служба timesyncd, можете ее отключить.
sudo systemctl stop systemd-timesyncd sudo systemctl disable systemd-timesyncd
А в место нее установить, к примеру, ntp, работающую в режиме клиента.
sudo apt install ntp
Поясню немного, зачем это может понадобиться. Если вам необходимо только синхронизировать время, то утилиты timesyncd вполне хватает для этой простой задачи. Но иногда вам нужен более широкий функционал. Например, вы хотите настроить в своей локальной сети свой собственный сервер времени, чтобы остальные компьютеры сверяли свои часы с ним. В этом случае вам нужна будет служба ntp. А раз вы ее и так поставите, то зачем вам дублирование функционала? В этом случае имеет смысл отключить timesyncd и оставить только ntp. Она умеет работать и в качестве сервера времени, и в качестве клиента синхронизации.
Итак, установили ntp. Для того, чтобы синхронизировать время, достаточно ее просто запустить:
sudo systemctl enable --now ntp
Проверяем статус синхронизации:
sudo systemctl status ntp
Видим пул серверов времени, с которыми наш ubuntu server будет синхронизировать свои часы. Настройки службы находятся в конфигурационном файле /etc/ntp.conf. Посмотреть информацию о работе ntp можно с помощью утилиты ntpq:
ntpq -p
Далее рассмотрим вариант, когда вам нужен свой сервер времени в локальной сети. Для этого донастроим установленную службу ntp.
Настройка ntp сервера
Сервер времени в своей работе использует отдельный протокол NTP (Network Time Protocol). Ему нужен для работы UDP Port 123. Так что прежде чем дальше настраивать ntp, откройте этот порт на фаерволе или отключите его. Настройка firewall выходит за рамки данной статьи, так как в его качестве может использоваться разный софт. Если у вас управление фаерволом настроено через ufw, то достаточно такой команды:
sudo ufw allow ntp
Далее открываем конфиг /etc/ntp.conf и приводим его к примерно следующему виду:
driftfile /var/lib/ntp/ntp.drift restrict -4 default kod notrap nomodify nopeer noquery limited restrict 127.0.0.1 restrict 10.20.1.0 mask 255.255.255.0 nomodify notrap pool 0.ubuntu.pool.ntp.org iburst pool 1.ubuntu.pool.ntp.org iburst pool 2.ubuntu.pool.ntp.org iburst pool 3.ubuntu.pool.ntp.org iburst logfile /var/log/ntp.log
Это минимально необходимое содержимое, чтобы запустить свой собственный сервер времени на базе ntp в локальной сети 10.20.1.0/24. Если вам не нужен протокол ipv6, то можете его отключить. Для этого в файл /etc/default/ntp добавляем параметр:
NTPD_OPTS='-4 -g'
И перезапускаем службу ntp. Проверяем, как она работает.
sudo ss -tulnp | grep ntp
Служба времени слушает все сетевые интерфейсы. Теперь с любого клиента в локальной сети можно выполнить с помощью ntpdate синхронизацию времени с нашим Ubuntu Server. Проверьте это самостоятельно. Ранее я уже показывал, как это сделать.
Ошибки синхронизации времени
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
Время загрузки системы
Немного затрону еще одну тему, которая не связана напрямую с часами на сервере, но тем не менее имеет отношение ко времени. Эта информация наиболее актуальна как раз в этой статье.
Как узнать точное время включения компьютера с Ubuntu?
Команда uptime может показать не только время, в течении которого работает сервер, но и точное время запуска системы:
uptime
uptime -s
Эту же информацию можно получить с помощью утилиты who:
who -b system boot 2021-03-26 17:01
Время последнего выключения Ubuntu
Если вы хотите узнать не только время включения сервера, но и время последних выключений или время последней перезагрузки, то воспользуйтесь утилитой last:
last -x reboot
Она показывает, когда последние несколько раз компьютер выключался или перезагружался.
Заключение
Подвожу кратко итог сегодняшней статьи на тему настройки времени на сервере с ubuntu. Я рассмотрел все основные моменты, связанные с часами, часовыми поясами, а так же их синхронизацией. Если я забыл что-то важное, ошибся или у вас есть дополнения, без которых эта статья не видится вам полноценной и законченной, делитесь ими в комментариях. За это вам будет моя отдельная благодарность.
Время от времени часы на компьютере могут сбиваться по различным причинам, время может быть установлено изначально неправильно или неправильно выбран часовой пояс. Хотя в системе по умолчанию настроена синхронизация времени с интернетом и я уже давно забыл что значит постоянно перенастраивать часы, если они отстают, такая необходимость может появиться.
В этой статье мы рассмотрим как выполняется установка времени Linux различными способами, через терминал, графический интерфейс и так далее. Но сначала нам нужно понять как работает время.
Как работает время на компьютере?
Статья ориентирована на новичков, в первую очередь на них, потому что профессионалы уже и так знают как это сделать. Поэтому сначала рассмотрим как работает время в Linux. Когда компьютер работает часы идут, это ясно, но когда вы его отключаете, а затем включаете снова часы показывают не то время, на котором остановились, а правильное время. Это происходит потому, что часы на материнской плате идут постоянно. Таймер питается от той же батарейки, что и энергозависимая память BIOS.
Операционная система передает значение таймера в память BIOS при выключении и берет его оттуда при включении. Отсюда берутся проблемы со временем при двойной загрузке Windows и Linux, но эта тема раскрыта в другой статье – сбивается время в Ubuntu и Windows. Другая проблема почему может сбиваться время – это неверно установленный часовой пояс. Если вы установили часовой пояс linux неверно, то часы будут постоянно синхронизироваться через интернет и идти неверно.
Когда все проблемы с временем будут устранены, можно перейти установить нужное время и быть уверенным что оно не будет сбиваться. Дальше рассмотрим как это сделать.
Вы можете видеть текущее время прямо на вашем рабочем столе, в KDE часы добавлены на панель, да и в Gnome, они размещены по центру панели по умолчанию:
Если навести курсор на время, вы увидите более подробную информацию, область уведомлений и календарь.
Но настроить время здесь уже не получится. Для этого нужно открывать настройки системы. Мы будем рассматривать настройки для Gnome. Откройте меню Dash и наберите в строке поиска “Параметры”:
Дальше откройте “Дата и время”:
Как видите, здесь уже установлено значение по умолчанию “Автоматическое определение даты и времени”, а внизу есть пункт, который отвечает за часовой пояс.
Вы можете просто поменять часовой пояс чтобы время синхронизировалось правильно, если что-то не так. Также можно задать время вручную. Для этого сначала отключите автоматическую синхронизацию, а затем выберите дату и время:
Никаких кнопок нажимать не нужно, закройте окно выбора и новое время будет применено. Вы всегда можете вернуть настройки до значения по умолчанию.
Установка времени через терминал
Кроме графического интерфейса, у вас есть возможность делать все необходимые действия через терминал. Для этого есть утилита date. Сначала смотрим текущее время:
date
У утилиты есть множество опций отображения и настроек, но мы не будем их рассматривать. Есть еще одна команда, которая позволяет посмотреть системное время linux:
sudo hwclock -r
Чтобы установить время можно использовать ту же команду date. Для этого ей нужно передать строку со временем и датой, например:
date --set="строка"
В качестве строки можно брать ту, которую возвращает команда date без параметров, только она должна быть на английском, поэтому сразу смотрим:
LANG=en_US date
Затем меняем:
sudo date --set "Wed Sep 6 20:43:36 EEST 2017"
Если у вас включена коррекция даты через интернет, то ее нужно отключить перед этим, потому что вы даже заметить изменений не успеете, как сервер времени linux установит правильное время. Можно сократить эту строку:
sudo date --set "Sep 6 20:43:36 2017"
Это даст тот же результат. Еще один вариант – указать формат данных, которые вы собираетесь передавать с помощью модификаторов, например, изменить время linux:
sudo date +%T -s "20:43:36"
Здесь формат очень прост – часы:минуты:секунды. Можно давать время в 12 часовом формате, для этого добавьте модификатор %p:
date +%T%p -s "8:43:36PM"
Вы изменяете текущее время, но аппаратное системное время linux не изменяется, чтобы сохранить изменения используйте команду:
sudo hwclock -w
Еще один новый инструмент от systemd для управления временем – timedatectl. С помощью него можно выполнить те же операции, сначала смотрим доступную информацию о времени:
timedatectl
Текущее системное время отображается в строке Local Time. Чтобы изменить дату, используйте опцию -set-time. Синтаксис передаваемого ей параметра такой: ГГГГ-ММ-ДД ЧЧ:ММ:СС. Думаю тут понятно и без комментариев. Например:
sudo timedatectl --set-time "2017-09-06 20:43:36"
Можно задать только время, тогда нужно использовать синтаксис времени ЧЧ:ММ:СС, например:
sudo timedatectl --set-time "20:43:36"
Еще раз говорю, что если включена синхронизация по сети, то вы не сможете изменить время. Но с помощью timedatectl ее можно отключить:
sudo timedatectl set-ntp no
Или включить обратно:
sudo timedatectl set-ntp yes
C помощью этой же команды можно не только установить время linux, но и настроить часовой пояс, для этого используйте опцию set-timezone:
sudo timedatectl set-timezone 'EuropeKyiv'
Вы можете посмотреть список доступных часовых поясов командой:
timedatectl list-timezones
Видео о настройке времени с помощью timedatectl:
Выводы
Вот и все. Теперь вы знаете как выполняется установка времени linux. Как видите, это очень просто, вы можете использовать различные способы, в зависимости от того, что вам будет удобнее. Если у вас остались вопросы, спрашивайте в комментариях!
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .
Время является важным аспектом в системах Linux, особенно в критически важных службах, таких как задания cron.
Наличие правильного времени на сервере гарантирует, что сервер работает в здоровой среде, которая состоит из распределенных систем и поддерживает точность на рабочем месте.
В этой статье мы сконцентрируемся на том, как установить время / дату / часовой пояс и синхронизировать часы сервера с вашим компьютером с Ubuntu Linux.
Проверьте текущее время
Вы можете проверить текущее время и дату, используя команду date и timedatectl.
Эти команды могут быть выполнены прямо из терминала от обычного пользователя или от суперпользователя.
Команды удобны, полезность двух команд ощутима, когда вы хотите исправить неправильное время из командной строки.
Использование команды date
Войдите в систему как пользователь root и используйте команду следующим образом:
$ date
Вывод:
Вт фев 5 15:16:04 MSK 2019
Вы также можете использовать ту же команду, чтобы проверить дату 2 дня назад
$ date --date="2 days ago"
Использование команды timedatectl
Для проверки состояния времени в вашей системе, а также текущих настроек времени, используйте команду timedatectl, как показано далее:
# timedatectl
или
# timedatectl status
Изменение времени
Мы используем timedatectl для изменения системного времени в формате HH: ММ: ss.
HH обозначает час в 24-часовом формате, MM обозначает минуты, а SS – секунды.
Для установки времени на 09:08:07 используйте команду следующим образом (используя timedatectl)
# timedatectl set-time 09:08:07
Используя команду date
Изменение времени означает, что все системные процессы выполняются в одно и то же время, при этом рабочий стол и сервер работают одновременно.
Из командной строки используйте команду date следующим образом:
# date +%T -s "10:13:13"
Где,
• 10: час (hh)
• 13: минута (мм)
• 13: Второй (ss)
Чтобы изменить локаль на AM или PM, используйте %p в следующем формате.
# date +%T%p -s "6:10:30AM"
# date +%T%p -s "12:10:30PM"
Изменение даты
Как правило, вы хотите, чтобы ваша системная дата и время устанавливались автоматически.
Если по какой-либо причине вам необходимо изменить его вручную с помощью команды date, мы можем использовать эту команду:
# date –set=”20140125 09:17:00”
Он установит текущую дату и время вашей системы на «25 января 2014 года» и «09: 17: 00 AM».
Обратите внимание, что для этого у вас должна быть привилегия root.
Вы можете использовать timedatectl, чтобы установить время и дату соответственно.
Допустимый формат: ГГГГ-ММ-ДД, ГГГГ представляет год, ММ – месяц в двух цифрах, а ДД – день в двух цифрах.
Чтобы изменить дату на 15 января 2019 года, вы должны использовать следующую команду
# timedatectl set-time 20190115
Создать пользовательский формат даты
Чтобы создать собственный формат даты, используйте знак плюс (+)
$ date +”Day : %d Month : %m Year : %Y”
Day: 05 Month: 12 Year: 2013
$ date +%D
12/05/13
Формат %D соответствует формату год / месяц / день.
Вы также можете указать название дня, если хотите.
Вот некоторые примеры :
$ date +”%a %b %d %y”
Fri 06 Dec 2013
$ date +”%A %B %d %Y”
Friday December 06 2013
$ date +”%A %B %d %Y %T”
Friday December 06 2013 00:30:37
$ date +”%A %B-%d-%Y %c”
Friday December-06-2013 12:30:37 AM WIB
Отобразить список / изменить часовые пояса
Изменение часового пояса имеет решающее значение, если вы хотите, чтобы все синхронизировалось с сетевым протоколом времени.
Первое, что нужно сделать, это составить список всех часовых поясов региона, используя опцию list-часовой пояс или grep, чтобы упростить понимание команды:
# timedatectl list-timezones
Приведенная выше команда представит прокручиваемый формат.
Рекомендуемый часовой пояс для серверов – UTC, поскольку он не имеет летнего времени.
Если вы знаете, определенные часовые пояса установите его, используя имя с помощью следующей команды
# timedatectl set-timezone America/Los_Angeles
Для отображения часового пояса выполните:
# timedatectl | grep "Time"
Установите Local-RTK
Часы реального времени (RTC), которые также называются аппаратными часами, не зависят от операционной системы и продолжают работать, даже когда сервер выключен.
Используйте следующую команду:
# timedatectl set-local-rtc 0
Кроме того, следующая команда для местного времени
# timedatectl set-local-rtc 1
Проверить / изменить время CMOS
Аккумулятор CMOS компьютера автоматически синхронизирует время с системными часами, если CMOS работает правильно.
Используйте команду hwclock, чтобы проверить дату CMOS следующим образом
# hwclock
Для синхронизации даты CMOS с системной датой используйте следующий формат
# hwclock –systohc
Правильное время для вашей среды Linux очень важно, потому что от этого зависят многие операции.
Такие операции включают в себя регистрацию событий и cron jobs.
Также, это важно для работы в домене.
Мы надеемся, что вы нашли эту статью полезной.
В статье мы разберёмся с тем, как настроить время в 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) мы будем настраивать часовой пояс и следить за синхронизацией времени, об этом чуть ниже.
Настройка часового пояса
Вообще часовой пояс в системе определяется файлом /etc/localtime, который является символьной ссылкой (про ссылки я уже писал):
alex@ubu:~$ ls -l /etc/localtime lrwxrwxrwx 1 root root 27 апр 21 01:01 /etc/localtime -> /usr/share/zoneinfo/Etc/UTC
Можно вручную отредактировать эту ссылку и указать нужный часовой пояс:
alex@ubu:~$ sudo ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime
Или воспользоваться утилитой timedatectl:
alex@ubu:~$ sudo timedatectl set-timezone Europe/Moscow
Если вас не устраивает выбранный мною часовой пояс, то можете посмотреть список поддерживаемых часовых поясов так:
alex@ubu:~$ timedatectl list-timezones
Проверим время и часовой пояс:
alex@ubu:~$ timedatectl Local time: Ср 2022-07-13 16:50:39 MSK Universal time: Ср 2022-07-13 13:50:39 UTC RTC time: Ср 2022-07-13 13:50:39 Time zone: Europe/Moscow (MSK, +0300) System clock synchronized: yes NTP service: active RTC in local TZ: no
Как видим, часовой пояс уже изменился на Europe/Moscow (MSK, +0300).
Синхронизация времени
В настоящее время очень важно чтобы часы на ваших серверах были синхронизированы. Очень много систем полагаются на время, например:
- если часы на сервере kerberos и клиенте расходятся более чем на 5 минут, то клиенты не смогут пройти проверку подлинности на сервере;
- в различных финансовых системах транзакции должны выполняться в надлежащем порядке, поэтому серверы выполняющую эту работу должны быть строго синхронизированы по времени;
- правильное время также нужно для выполнения автоматизированный задач;
- системные журналы также полагаются на время.
Получение списка NTP серверов по DHCP
Если ваш сервер получает сетевые настройки по dhcp, то он может получить список NTP серверов (серверов времени для синхронизации). Это настраивается в файле /etc/dhcp/dhclient.conf. В строке request мы определяем что хотим получать от сервера dhcp. И здесь может быть указан параметр ntp-servers:
alex@ubu:~$ cat /etc/dhcp/dhclient.conf # часть текста пропустил request subnet-mask, broadcast-address, time-offset, routers, domain-name, domain-name-servers, domain-search, host-name, dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, dhcp6.sntp-servers, netbios-name-servers, netbios-scope, interface-mtu, rfc3442-classless-static-routes, ntp-servers; # часть текста пропустил
Само собой, вы получите список ntp-серверов, только в том случае если ваш dhcp сервер их распространяет.
Служба синхронизации времени
В системах работающих на systemd работает специальная служба синхронизации времени systemd-timesyncd.service. Можем посмотреть её статус:
alex@ubu:~$ systemctl status systemd-timesyncd.service ● systemd-timesyncd.service - Network Time Synchronization Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2022-07-13 17:08:06 MSK; 23s ago Docs: man:systemd-timesyncd.service(8) Main PID: 399 (systemd-timesyn) Status: "Initial synchronization to time server 192.168.0.16:123 (192.168.0.16)." Tasks: 2 (limit: 2241) Memory: 1.3M CPU: 63ms CGroup: /system.slice/systemd-timesyncd.service └─399 /lib/systemd/systemd-timesyncd
Видим что синхронизация идет с сервером по адресу 192.168.0.16. У меня этот адрес прилетел по dhcp.
Обратите внимание, что служба эта стартует по запросу и останавливается после синхронизации времени!
Давайте выключим получение ntp серверов по dhcp:
alex@ubu:~$ sudo nano /etc/dhcp/dhclient.conf # в этой строке удалите опцию ntp-servers request subnet-mask, broadcast-address, time-offset, routers, domain-name, domain-name-servers, domain-search, host-name, dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, dhcp6.sntp-servers, netbios-name-servers, netbios-scope, interface-mtu, rfc3442-classless-static-routes;
Вы можете использовать следующий пул серверов времени для синхронизации – https://www.pool.ntp.org/zone/ru. Укажем первый сервер из этого пула в конфиге /etc/systemd/timesyncd.conf:
alex@ubu:~$ sudo nano /etc/systemd/timesyncd.conf [Time] NTP=0.ru.pool.ntp.org FallbackNTP=ntp.ubuntu.com RootDistanceMaxSec=5 PollIntervalMinSec=32 PollIntervalMaxSec=2048
В конфиге используются следующие опции:
- NTP – укажите 1 или несколько ntp серверов. Если хотите указать несколько серверов, разделяйте их пробелами;
- FallbackNTP – укажите 1 или несколько резервных ntp серверов;
- RootDistanceMaxSec – максимальное время в секундах, за которое пакет от сервера эталонного времени должен доходить до сервера к которому мы подлкючены;
- PollIntervalMinSec и PollIntervalMaxSec – минимальный и максимальный интервалы синхронизаций времени. Вначале используется минимальный интервал, а затем он увеличивается если система видит что локальное время со временем ntp-сервера не расходится.
После правки перезапустите службу синхронизаций времени:
alex@ubu:~$ sudo systemctl restart systemd-timesyncd.service
Дополнительно можно посмотреть информацию по синхронизации времени с помощью следующей команды:
alex@ubu:~$ timedatectl timesync-status Server: 91.209.94.10 (0.ru.pool.ntp.org) Poll interval: 34min 8s (min: 32s; max 34min 8s) Leap: normal Version: 4 Stratum: 2 Reference: 3EE70662 Precision: 1us (-25) Root distance: 4.012ms (max: 5s) Offset: -5.502ms Delay: 11.084ms Jitter: 2.886ms Packet count: 7 Frequency: +15,118ppm
Здесь мы видим адрес ntp-сервера, а также какой интервал синхронизации (34min 8s) использовался последний раз.
То-есть служба синхронизации времени systemd-timesyncd.service будет запускаться и останавливаться сейчас примерно раз в 34 минуты. Поэтому если увидите, что служба в состоянии loaded и inactive, не пугайтесь. По логам видно что она периодически запускается:
alex@ubu:~$ systemctl status systemd-timedated ○ systemd-timedated.service - Time & Date Service Loaded: loaded (/lib/systemd/system/systemd-timedated.service; static) Active: inactive (dead) Docs: man:systemd-timedated.service(8) man:localtime(5) man:org.freedesktop.timedate1(5) июл 19 15:54:24 s-ubu systemd[1]: systemd-timedated.service: Deactivated successfully. июл 19 15:55:41 s-ubu systemd[1]: Starting Time & Date Service... июл 19 15:55:41 s-ubu systemd[1]: Started Time & Date Service. июл 19 15:56:35 s-ubu systemd[1]: systemd-timedated.service: Deactivated successfully. июл 19 16:05:45 s-ubu systemd[1]: Starting Time & Date Service... июл 19 16:05:45 s-ubu systemd[1]: Started Time & Date Service. июл 19 16:06:15 s-ubu systemd[1]: systemd-timedated.service: Deactivated successfully. июл 19 16:28:42 s-ubu systemd[1]: Starting Time & Date Service... июл 19 16:28:42 s-ubu systemd[1]: Started Time & Date Service. июл 19 16:30:17 s-ubu systemd[1]: systemd-timedated.service: Deactivated successfully.
Из вывода:
- Deactivated successfully – служба останавливается;
- Starting Time & Date Service… – служба стартует;
- Started Time & Date Service – служба стартовала;
- и так по кругу.
Ещё один способ задать часовой пояс
С помощью команды dpkg-reconfigure tzdata также можно задать часовой пояс:
alex@ubu:~$ sudo dpkg-reconfigure tzdata
После выполнения вы можете использовать псевдографический интерфейс для настройки часового пояса. Вначале выберите географический район:
Затем город:
Итог
Теперь вы знаете как настроить время на сервере Debian или Ubuntu. Мы научились устанавливать часовой пояс и настраивать синхронизации времени с ntp серверами.
Узнали про следующие команды:
- date – покажет текущую дату, время и часовой пояс;
- timedatectl – покажет тоже самое что и date + синхронизуется ли время;
- timedatectl list-timezones – покажет список поддерживаемых часовых поясов;
- timedatectl set-timezone Europe/Moscow – установить часовой пояс Europe/Moscow;
- timedatectl timesync-status – покажет с какими ntp-серверами синхронизуется время и как часто;
- dpkg-reconfigure tzdata – установить часовой пояс.
Познакомились с файлами:
- /etc/localtime – является символической ссылкой и содержит информацию о текущем часовом поясе;
- /etc/dhcp/dhclient.conf – настройки dhcp-клиента, который умеет запрашивать ntp-сервера для синхронизации времени;
- /etc/systemd/timesyncd.conf – настройки службы синхронизации времени.
Узнали про службу синхронизации времени:
- systemd-timedated.service – стартует по запросу, а после синхронизации времени отключается до следующей синхронизации.
Сводка
Имя статьи
Дата, время и часовой пояс в Linux
Описание
В статье мы разберёмся с тем, как настроить время в Linux. Посмотрим текущее время, укажем часовой пояс и настроим синхронизацию времени
У каждого вычислительного устройства есть время и дата как самая основная предоставляемая им услуга. Дата/время и часовой пояс являются взаимосвязанными явлениями в вычислительных устройствах, поскольку дата/время зависит от часового пояса, выбранного пользователем. Дата и время выбираются автоматически в соответствии с часовым поясом; однако пользователи также могут изменить их вручную.
Компьютер Linux управляет двумя типами часов:
Аппаратные часы
Они также известны как часы реального времени (RTC) и отслеживает время и дату, даже если система выключена. Для RTC имеется небольшая резервная батарея, позволяющая продолжать работу часов.
Программные часы
В отличие от часов реального времени, эти часы не имеют резервного питания; таким образом, он не сохраняет время, когда система выключена или работает с низким энергопотреблением. Однако, когда система включена, она получает помощь от аппаратных часов и выбирает правильную дату/время. Программные часы также могут называться системными часами.
В этой статье мы подробно рассмотрим использование известной команды timedatectl ; Итак, начнем:
Как проверить и отредактировать время/дату в Ubuntu 20.04
В этом разделе объясняется процесс проверки и редактирования времени/даты в Ubuntu 20.04.
Синтаксис команды timedatectl приведен ниже:
Синтаксис
timedatectl [option] [command]
Основное использование этой команды — показать текущую дату и время; выполните команду, указанную ниже, чтобы получить печать времени и даты:
После получения результата вышеуказанной команды; вы можете заметить подробную информацию, такую как ваше местное время и дата, всемирное время, часовой пояс и т. д .:
Как изменить время или дату с помощью timedatectl
Команду timedatectl можно использовать для изменения времени или даты в системе. Чтобы изменить дату или время, используется следующий синтаксис:
Синтаксис
timedatectl set-time HH:MM:SS
Более того, следующая команда изменит местное время на 11:11:11 (HH:MM:SS); Замечено, что всемирное время и RTC также корректируются по местному времени:
$ timedatectl set-time 11:11:11
Чтобы проверить изменения, необходимо выполнить следующую команду:
Точно так же можно изменить текущую дату системы, используя ту же команду, что и выше:
Синтаксис для изменения даты системы приведен ниже:
Синтаксис
timedatectl set-time “YYYY-MM-DD”
Где «Y», «M» и «D» представляют год, месяц и день соответственно.
Например, приведенная ниже команда изменяет дату на 2021-09-01 (YYY-MM-DD) : следует отметить, что время также будет сброшено на 00:00:00:
$ timedatectl set-time “2021-09-01”
Как изменить часовой пояс с помощью timedatectl
Во-первых, вы должны знать часовой пояс, в котором вы работаете; вы можете проверить свой часовой пояс, используя следующую команду:
$ timedatectl | grep Time
Или простая команда timedatectl также может дать вам требуемый результат.
Timedatectl можно использовать для изменения текущего часового пояса; во-первых, вы должны знать часовые пояса, поддерживаемые вашей системой; чтобы проверить список доступных часовых поясов, выполните следующую команду.
$ timedatectl list-timezones
Если вы хотите изменить часовой пояс на другие доступные часовые пояса, приведенный выше список будет вам полезен в этом отношении. Вы можете установить часовой пояс, следуя синтаксису, описанному ниже:
Синтаксис
timedatectl set-timezone [name_of_timezone]
Например, следующая команда поможет изменить часовой пояс на «Europe/Moscow»:
$ timedatectl set-timezone Europe/Moscow
Более того, если вы хотите установить часовой пояс на всемирное координированное время (UTC), выполните приведенную ниже команду: рекомендуется сохранить настройки часов в формате UTC:
$ timedatectl set-timezone UTC
Как синхронизировать часы реального времени с помощью timedatectl
Аппаратные часы (также известные как часы реального времени) системы можно синхронизировать с вашим местным часовым поясом или UTC с помощью команды timedatectl. Он передает команде двоичные числа (0,1), которые относятся к местному часовому поясу или UTC.
Двоичное число (0) используется для синхронизации аппаратных часов с местным часовым поясом, и вы можете выполнить следующую команду для синхронизации часов реального времени с UTC:
$ timedatectl set-local-rtc 0
Кроме того, вы можете синхронизировать RTC с местным часовым поясом, используя приведенную ниже команду. Эта команда покажет предупреждение о том, что изменение RTC на местный часовой пояс может вызвать проблемы.
$ timedatectl set-local-rtc 1
Что касается синтаксиса timedatectl, он содержит ключевые слова параметров между ключевыми словами timedatectl и command. Timedatectl поддерживает различные варианты, которые могут быть рассмотрены для выполнения конкретных задач, таких как:
- –h показывает справочную информацию
- —version — для проверки версии timedatectl
- —no–ask–password — опция позволит пользователю обойти процесс аутентификации
Заключение
Ubuntu, будучи известным дистрибутивом Linux, позволяет выполнять несколько операций с помощью множества команд. Среди них команда timedatectl используется для облегчения работы пользователей командной строки относительно часового пояса, даты и времени вашей системы. В этой статье представлена краткая информация о команде timedatectl в Ubuntu. Пользователи могут редактировать время, дату и часовой пояс с помощью терминала командной строки. Более того, он позволяет синхронизировать часы реального времени с местным часовым поясом или UTC, но лучше практиковать синхронизацию часов реального времени с UTC.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.