Получение времени с сервера времени ubuntu завис
Точное хронометрирование – очень важный аспект корректной работы многих современных программ. Из-за неправильного времени на сервере могут возникнуть ошибки, и данные могут быть повреждены (например, при обновлении БД или логировании).
В Ubuntu 16.04 синхронизация времени встроена и включена по умолчанию; за неё отвечает сервис timesyncd. Данное руководство ознакомит вас с базовыми командами для управления временем, научит проверять состояние timesyncd и устанавливать другие сервисы сетевого времени.
Требования
- Сервер Ubuntu 16.04.
- Пользователь с доступом к sudo (руководство нужно выполнить в сессии этого пользователя).
Все необходимые инструкции можно найти здесь.
Основные команды для управления временем
date – основная команда для определения времени на сервере. Любой пользователь может использовать её, чтобы узнать дату и время:
date
Wed Apr 26 17:44:38 UTC 2017
Обычно по умолчанию серверы используют часовой пояс UTC (Coordinated Universal Time) – это всемирное координированное время. UTC последовательно устанавливает время на серверах и минимизирует ошибки в случае если сервера инфраструктуры находятся в разных часовых поясах.
Чтобы изменить часовой пояс, используйте команду timedatectl.
Запросите список доступных поясов:
Перемещаться вниз по списку можно с помощью клавиши пробела, а вверх – с помощью b. Выберите часовой пояс, запишите его и нажмите q, чтобы закрыть список.
Используйте следующую команду, указав в ней требуемый часовой пояс:
sudo timedatectl set-timezone America/New_York
Примечание: Вместо America/New_York укажите необходимый часовой пояс.
Убедитесь, что пояс изменился:
date
Wed Apr 26 13:55:45 EDT 2017
Аббревиатура часового пояса будет отражать новое значение.
Управление сервисом timesyncd
До недавнего времени за синхронизацию времени отвечал демон ntpd. Он подключал сервер к пулу серверов NTP, что обеспечивало точное хронометрирование.
Теперь Ubuntu вместо ntpd по умолчанию использует timesyncd. Сервис timesyncd подключается к тем же серверам времени и работает примерно таким же образом, но он легче ntpd и интегрирован с systemd.
Узнать состояние timesyncd позволяет команда timedatectl.
timedatectl
Local time: Wed 2017-04-26 17:20:07 UTC
Universal time: Wed 2017-04-26 17:20:07 UTC
RTC time: Wed 2017-04-26 17:20:07
Time zone: Etc/UTC (UTC, +0000)
Network time on: yes
NTP synchronized: yes
RTC in local TZ: no
Команда выведет местное время, универсальное время (если вы используете часовой пояс UTC, оно будет совпадать с местным временем) и дополнительную информацию о состоянии сетевого времени. Строка «Network time on: yes» означает, что сервис timesyncd включен, а «NTP synchronized: yes» указывает, что время было успешно синхронизировано.
Если сервис timesyncd отключен, введите:
sudo timedatectl set-ntp on
После этого снова запросите состояние timesyncd. В строках Network time on и NTP synchronized должно быть значение yes.
Переход с timesyncd на ntpd
В большинстве случаев сервис timesyncd подходит для работы, но если ваши приложения чувствительны к малейшим колебаниям времени, лучше обслуживать их с помощью ntpd, так как этот демон использует более сложные методы синхронизации системного времени.
Прежде чем установить ntpd, отключите timesyncd:
sudo timedatectl set-ntp no
Убедитесь, что timesyncd отключился:
В выводе должна быть строка:
Network time on: no
Теперь можно установить ntp:
sudo apt-get install ntp
Демон ntpd запускается автоматически после установки. Запросите состояние ntpd:
ntpq – это инструмент запросов для ntpd. Флаг –p запрашивает данные о серверах NTP, к которым подключается ntpd. Ваш вывод будет отличаться, но в нём всё равно должен быть стандартный пул Ubuntu.
На установку соединения ntpd потребуется несколько минут.
Заключение
Теперь вы умеете управлять системным временем сервера Ubuntu.
Больше информации можно найти в документации NTP или на сайте проекта NTP Pool.
Следить за актуальностью времени на всех узлах локальной сети удобнее с помощью сервера синхронизации времени NTP. В инструкции рассказано об установке и настройке такого сервера на Linux Ubuntu Server 16.04. Данное руководство можно использовать для настройки ntpd на любом другом Linux (например, Debian или CentOS).
Установка сервера
Устанавливаем ntp сервер следующей командой:
apt-get install ntp
Разрешаем автозапуск и стартуем сервис:
systemctl enable ntp || update-rc.d ntp defaults
systemctl start ntp || service ntp start
Настройка NTP
Открываем файл с настройками:
Настраиваем серверы, с которых наш NTP будет брать эталонное время. Например:
restrict default kod notrap nomodify nopeer noquery
restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap
restrict 127.0.0.1
restrict ::1
Настройки по умолчанию могут быть разные для IPv4 и IPv6:
restrict -4 default kod notrap nomodify nopeer noquery
restrict -6 default kod notrap nomodify nopeer noquery
systemctl restart ntp || service restart ntp
Если используется брандмауэр, добавляем правило:
iptables -I INPUT 1 -p udp --dport 123 -j ACCEPT
или с помощью ufw:
ufw allow in on enp2s0 to any port 123 proto udp
* где enp2s0 — сетевой интерфейс, на котором слушает наш сервер.
Дополнительные настройки
Настройка файла хранения логов:
Тестирование
Проверить состояние получения эталонного времени можно командой:
Мы должны увидеть, примерно, следующее:
- remote — адрес сервера времени, с которым синхронизируется наш сервер;
- refid — вышестоящий сервер (с которым сервер из графы выше получает время);
- st — уровень сервера (stratum);
- t — пир (unicast или multicast);
- when — когда последний раз сверялось время;
- poll — периодичность синхронизации с этим сервером;
- reach — состояние работоспособности. Если удалось произвести синхронизации восемь раз в подряд становится равным 377;
- delay — время задержки;
- offset — разница между нашим временем и временем на сервере; положительное — наши часы спешат, отрицательное — отстают;
- jitter — смещение времени на удаленном сервере;
- * — с этим сервером синхронизирует время наш ntpd;
- + — сервер можно использовать для сверки часов;
- - — не рекомендован для синхронизации;
- x — не доступен.
Проверить отдачу времени сервером можно введя команду на другом Linux:
Правильный ответ имеет следующий вид:
ntpdate[3576]: adjust time server 192.168.0.15 offset 0.017657 sec
* время было рассинхронизировано на 0.017657 секунд.
Отобразить текущее время можно командой:
Если после синхронизации время некорректно, настраиваем правильный часовой пояс:
cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime
* московское время (GMT+3).
Настройка клиента Linux
Для клиентов можно выбрать 2 стратегии настройки — с помощью ntp или утилиты ntpdate.
apt-get install ntp
CentOS / Red Hat:
yum install ntp
В настройка /etc/ntp.conf в качестве сервера оставляем только наш локальный сервер, например:
Остальные pool и server удаляем или комментируем.
systemctl restart ntp || service restart ntp
ntpdate
Утилита командной строки выполняет разовую синхронизацию. Чтобы автоматизировать процесс, добавляем задание в cron:
0 0 * * * /usr/sbin/ntpdate 192.168.0.15
* в данном примере задание будет выполняться раз в день в 00:00. /usr/sbin/ntpdate — полный путь расположения утилиты, в разных системах может быть разным — проверить стоит командой which ntpdate.
Настройка клиента Windows
В командной строке выполняем:
w32tm /config /manualpeerlist:"192.168.0.15,0x8" /syncfromflags:manual /update
Некоторые ошибки
1. the NTP socket is in use, exiting
Как правило, данная ошибка возникает при попытке синхронизировать время с помощью ntpdate, когда в системе работает демон ntp.
Причина: NTP сокет в системе уже занят, как правило, ntpd.
Решение: либо не использовать ntpdate, так как ntp умеет сверять время, либо отключить сервис ntpd командой service ntp stop.
2. Connection refused
Возникает при попытке выполнить команду ntpq -p.
Причина: нет разрешения на обращение к серверу.
Решение: проверьте, удастся ли выполнить запрос командой ntpq -pn 127.0.0.1 или ntpq -pn ::1. Также убедитесь, что настройка restrict позволяет серверу подключаться к самому себе по нужному протоколу.
3. no server suitable for synchronization found
Ошибка появляется при попытке синхронизировать время с другим сервером синхронизации.
Причина: сервер синхронизации не доступен по одной из причин: 1) не работает или выключен, 2) установлен restrict, 3) на сервере не запущен ntpd, 4) нет сетевой доступности из-за проблем на сети или брандмауэра.
Важным параметром в эксплуатации любого сервера является корректно настроенное время и его своевременная синхронизация. Как выполнить смену часового пояса в ubuntu в случае его изменения или неверного указания во время установки – одна из тем этой статьи. Также я расскажу про установку и использование программ для синхронизации времени и настройку службы точного времени ntp.
Время и дата в Ubuntu Server
Как я уже сказал во введении, следить за системным временем в ubuntu server нужно в обязательном порядке, как и в любом другом сервере. Начальные настройки вы делаете еще во время установки системы. Далее вам может понадобиться либо изменение часового пояса, либо более точная настройка и синхронизация часов.
Кстати, если вам интересно узнать, почему я лично использую именно ubuntu server, а не какой-то другой linux дистрибутив, то читайте мой обзор и сравнение ubuntu с другими системами.
Особенно актуальной тема системного времени становится, когда вы арендуете сервера где-то в другой стране с отличным от вашего часового пояса. По умолчанию, у хостера скорее всего будет установлен его часовой пояс. Иногда я забываю это проверить и замечаю только тогда, когда возникают какие-то проблемы. А вот список проблем, которые могут теоретически возникнуть, если на сервере будет неправильное время:
- При просмотре логов или разборе инцидентов придется сначала переводить время в свой часовой пояс или формат, чтобы адекватно разобраться в ситуации.
- Если у вас настроена какая-то интеграция с доменной структурой Windows, расхождение по времени может приводить к проблемам.
- При использовании cron и автоматических заданий для выполнения, неправильное время на сервере может удивить вас тем, что ваши задачи будут выполнены не тогда, когда вы этого ожидаете.
- Если на сервере работает web сайт или почтовый сервис, время публикации постов или отправления писем будет неправильным, что создаст неудобство пользователям.
Это список, что первым делом приходит на ум. Думаю, его можно сильно расширить, если потратить чуть больше времени. Но не вижу в этом смысла. Думаю, и так понятно, что часы на сервере должны всегда показывать точное время в нужном вам часовом поясе. Этим мы и займемся далее.
Утилита date
Посмотреть время в командной строке Ubuntu можно с помощью команды date.
В данном случае вы видите следующую информацию:
Для того, чтобы посмотреть время в 24-х часовом формате в консоли ubuntu, можно использовать дополнительный ключ к команде, добавив туда еще и саму дату:
Таким образом, с помощью параметров форматирования, вы можете выбирать любой формат времени для отображения. Традиционно, командная строка linux позволяет очень гибко выполнять различные действия с помощью своих утилит. Например, вы можете посмотреть не только время и дату, но и вывести в консоль номер дня недели, добавив дополнительный ключ %j:
Узнать время сервера в unix формате можно вот так:
Если у вас часовой пояс отличный от UTC, а вы хотите увидеть время именно в этом часовой поясе, то воспользуйтесь следующим ключом команды:
Очень удобно использовать утилиту date с различными параметрами в скриптах, чтобы получать время в удобном для вас формате. Например, когда вы используете время в названиях файлов бэкапов при их создании. Вот несколько примеров наиболее часто используемых форматов отображения даты и времени:
Утилита timedatectl
Local time | Локальное время данного сервера |
Universal time | Время в часовом поясе UTC |
RTC time | Время на аппаратных часах |
Time zone | Ваш часовой пояс |
С просмотром в консоли текущего времени сервера разобрались, переходим к его настройке.
Установка и настройка времени в Ubuntu
Ручная настройка времени в ubuntu обычно не представляет какой-то особой сложности, если понимаешь, как это сделать. Для того, чтобы самостоятельно установить время через консоль, необходимо запустить date через sudo со следующими параметрами:
В данном случае при обновлении времени мы подразумевали:
В моих примерах время отображается в 12-ти часовом формате на английском языке. Для того, чтобы перевести его в 24-х часовой формат, нужно изменить в locale параметр LC_TIME. Именно там стоит привязка к формату. Например, в локали en_US по умолчанию используется 12-ти часовой формат, а в ru_RU или en_GB 24-х часовой.
Для того, чтобы дата в консоли отображалась на русском языке, а время в 24-х часовом формате, достаточно сформировать locale ru_RU и изменить только формат времени, оставив все остальное на английском языке.
После этого необходимо завершить сеанс пользователя и залогиниться снова, чтобы изменение формата вступило в силу.
Еще один способ установки даты и времени с помощью timedatectl:
При этом вы можете получить ошибку: Failed to set time: Automatic time synchronization is enabled. Утилита timedatectl более умная, нежели date. Она проверяет, не настроена ли у вас автоматическая синхронизация времени. И если настроена, то вручную не дает его изменить. В целом, это правильный подход, хотя и может создавать неудобства. В этом случае вам надо отключить синхронизацию и только потом установить время руками. Эту тему мы будем рассматривать ниже отдельно.
Установка и настройка часового пояса в Ubuntu
Непосредственно со временем разобрались, рассмотрим теперь настройку временной зоны. Как посмотреть установленный часовой пояс, мы уже разобрались выше. Теперь разберем, как его изменить или просто задать, если ранее этого не сделали и у вас по умолчанию стоит UTC.
Вы увидите длинный список временных зон, состоящий из 348 строк. Его можно будет скролить, либо сразу ограничить вывод нужным вам диапазоном.
После того, как выбрали зону, изменяем текущий часовой пояс.
или с помощью tzselect:
Мы выполнили изменение часового пояса в ubuntu как минимум двумя разными способами. Не забудьте после этого на всякий случай проверить установленную timezone. Расскажу про еще один способ, как это можно сделать в консоли. После настройки тайм зоны, на нее создается символьная ссылка от файла /etc/localtime в директорию /usr/share/zoneinfo.
Меняя эту ссылку, можно так же изменять часовой пояс.
Синхронизация времени с помощью ntpdate, timedatectl
После того, как вы настроили правильную дату и нужный часовой пояс, стоит поработать над тем, чтобы часы всегда показывали точное значение минут и часов. Для этого надо настроить синхронизацию времени. Тут традиционно для linux есть несколько способов и вариантов настройки.
После установки системы вам стоит проверить, а не запущена ли у вас уже синхронизация времени с помощью timesyncd. Проверяем:
Клиент ntp
Если вас по какой-то причине не устраивает служба timesyncd, можете ее отключить.
А в место нее установить, к примеру, ntp, работающую в режиме клиента.
Поясню немного, зачем это может понадобиться. Если вам необходимо только синхронизировать время, то утилиты timesyncd вполне хватает для этой простой задачи. Но иногда вам нужен более широкий функционал. Например, вы хотите настроить в своей локальной сети свой собственный сервер времени, чтобы остальные компьютеры сверяли свои часы с ним. В этом случае вам нужна будет служба ntp. А раз вы ее и так поставите, то зачем вам дублирование функционала? В этом случае имеет смысл отключить timesyncd и оставить только ntp. Она умеет работать и в качестве сервера времени, и в качестве клиента синхронизации.
Итак, установили ntp. Для того, чтобы синхронизировать время, достаточно ее просто запустить:
Проверяем статус синхронизации:
Видим пул серверов времени, с которыми наш ubuntu server будет синхронизировать свои часы. Настройки службы находятся в конфигурационном файле /etc/ntp.conf. Посмотреть информацию о работе ntp можно с помощью утилиты ntpq:
Далее рассмотрим вариант, когда вам нужен свой сервер времени в локальной сети. Для этого донастроим установленную службу ntp.
Настройка ntp сервера
Сервер времени в своей работе использует отдельный протокол NTP (Network Time Protocol). Ему нужен для работы UDP Port 123. Так что прежде чем дальше настраивать ntp, откройте этот порт на фаерволе или отключите его. Настройка firewall выходит за рамки данной статьи, так как в его качестве может использоваться разный софт. Если у вас управление фаерволом настроено через ufw, то достаточно такой команды:
Далее открываем конфиг /etc/ntp.conf и приводим его к примерно следующему виду:
Это минимально необходимое содержимое, чтобы запустить свой собственный сервер времени на базе ntp в локальной сети 10.20.1.0/24. Если вам не нужен протокол ipv6, то можете его отключить. Для этого в файл /etc/default/ntp добавляем параметр:
И перезапускаем службу ntp. Проверяем, как она работает.
Служба времени слушает все сетевые интерфейсы. Теперь с любого клиента в локальной сети можно выполнить с помощью ntpdate синхронизацию времени с нашим Ubuntu Server. Проверьте это самостоятельно. Ранее я уже показывал, как это сделать.
Ошибки синхронизации времени
TIME_ERROR: 0x2041: Clock Unsynchronized
the NTP socket is in use, exiting
no server suitable for synchronization found
Еще одна популярная ошибка, которая может возникнуть при запуске ntpdate. Она означает, что не получается по какой-то причине установить соединение с сервером времени. В общем случае это означает, что есть какие-то сетевые проблемы, но не обязательно. Вы можете попробовать запустить ntpdate c ключом -u. Он означает, что будет использован локальный не 123-й порт udp, как обычно, а другой из непривилегированного диапазона. Иногда это помогает, так как многие провайдеры из-за известной уязвимости протокола ntp блокируют исходящий 123 порт.
Служба ntp не запускается после загрузки сервера
Если ntp не стартует после загрузки сервера, то связано это может быть в первую очередь с тем, что не отключена служба timesyncd. Отключите ее и проверьте еще раз:
Ubuntu меняет время и часовой пояс в bios
Убунта имеет дурную привычку при синхронизации времени устанавливать в bios часовой пояс UTC. В общем случае это не доставляет проблем, но если у вас установлена параллельно еще какая-то система на компьютере, то это может создавать проблемы. Чтобы Ubuntu не трогала часы в bios, необходимо выполнить следующую команду:
Время загрузки системы
Немного затрону еще одну тему, которая не связана напрямую с часами на сервере, но тем не менее имеет отношение ко времени. Эта информация наиболее актуальна как раз в этой статье.
Как узнать точное время включения компьютера с Ubuntu?
Команда uptime может показать не только время, в течении которого работает сервер, но и точное время запуска системы:
Эту же информацию можно получить с помощью утилиты who:
Время последнего выключения Ubuntu
Если вы хотите узнать не только время включения сервера, но и время последних выключений или время последней перезагрузки, то воспользуйтесь утилитой last:
Она показывает, когда последние несколько раз компьютер выключался или перезагружался.
Заключение
Подвожу кратко итог сегодняшней статьи на тему настройки времени на сервере с ubuntu. Я рассмотрел все основные моменты, связанные с часами, часовыми поясами, а так же их синхронизацией. Если я забыл что-то важное, ошибся или у вас есть дополнения, без которых эта статья не видится вам полноценной и законченной, делитесь ими в комментариях. За это вам будет моя отдельная благодарность.
Многие новые пользователи, которые только перешли на Linux с операционной системы Windows, и пока все еще запускают эту систему время от времени, сталкиваются с проблемой, что после загрузки windows в ubuntu сбивается время на несколько часов назад или вперед, затем после нескольких перезагрузок уже сложно понять какое сейчас время.
Все это происходит из-за различий формата хранения времени в этих операционных системах. И будет происходить при каждой перезагрузке, сколько бы вы ни устанавливали правильное время. Но эту проблему можно решить. И даже несколькими способами. В этой статье мы рассмотрим, как решить проблему, если у вас так же сбивается время при переходе из Ubuntu в Windows.
ПОЧЕМУ ТАК ПРОИСХОДИТ?
Так почему же сбивается время Ubuntu и Windows? Вот, допустим, работает Windows, и со временем там все нормально, оно сохранено в формате localtime. Но при перезагрузке в Linux, операционная система берет время Localtime, и думает что это UTC. Таким образом, пользователь будет брать уже правильное время, и прибавлять к нему поправку на часовой пояс. Поэтому время уже будет неверным.
Дальше вы исправили время, и теперь аппаратные часы работают в UTC. Но затем грузите WIndows. Система думает, что это Localtime и для установки правильного программного времени добавляет к аппаратному поправку на часовой пояс, например, в нашем случае +3. Дальше каждый пользователь еще раз применяет эту поправку и время уже сбито, опять.
НАСТРОЙКА WINDOWS ДЛЯ РАБОТЫ ПО UTC
Итак, если у вас сбивается время windows и linux при переключении между операционными системами, лучшим способом будет заставить Windows работать по более правильному и логичному формату. Для этого достаточно добавить один ключ реестра. Вы можете сделать это с помощью одной команды в консоли. Чтобы открыть консоль в Windows 10 проведите мышь в левый нижний угол, затем нажмите правую кнопку. В контекстном меню выберите Командная строка (администратор):
Синхронизация времени в Ubuntu выполняется при помощи протокола NTP. В состав операционной системы входит клиентское приложение, которое связывается с серверами и получает от них актуальную информацию о дате и времени.
Ubuntu используется для получении информации о дате и времени ntpdate, timesyncd и ntpd. При каждом запуске операционная система используется ntpdate для установки времени по серверу Ubuntu:
timesyncd и ntpd, в свою очередь, постоянно подправляют системные часы, что особенно полезно на серверах, которые редко перезагружаются. Первый пришёл на смену второму. Впрочем, никто не запрещает использовать и ntpd, но об этом ниже.
Посмотрим информация о состоянии timesyncd:
Команда выведет универсальное и местное время, часовой пояс, результат синхронизации (System clock synchronized) и статус сервиса (NTP service). Если сервис выключен, включить его можно командой
Если нужно сменить часовой пояс, сперва запросим список часовых поясов:
Затем устанавливаем нужный часовой пояс:
Если вместо timesyncd нужно использовать, ntpd, то сперва отключим timesyncd:
Далее устанавливаем ntpd:
Какой-то особой настройки оно не требует. Разве что можно отредактировать список серверов времени. Для этого надо отредактировать файл /etc/ntp.conf:
После этого надо перезапустить службу:
Дополнительную информацию можно получить командой
Теперь ваш компьютер или сервер с Ubuntu должен показывать точное время. 🙂
Читайте также: