Представь, что твой сервер Ubuntu показывает неправильное время. Логи сбиты, cron-задачи выполняются не тогда, когда нужно, а SSL-сертификаты жалуются на рассинхронизацию. Знакомая ситуация? Давай разберем, как правильно настроить время на Ubuntu — от базовой установки часового пояса до тонкой настройки NTP-синхронизации.
Проверка текущего состояния времени
Перед тем как что-то менять, давай посмотрим, что у нас сейчас. Основная команда для работы со временем в современных Ubuntu (с systemd) — timedatectl.
timedatectl status
Ты увидишь примерно такой вывод:
Local time: Tue 2024-12-24 14:30:00 UTC
Universal time: Tue 2024-12-24 14:30:00 UTC
RTC time: Tue 2024-12-24 14:30:00
Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
Настройка часового пояса в Ubuntu
Самый частый сценарий — сервер стоит в UTC, а тебе нужно московское время. Вот как это сделать.
1. Просмотр доступных часовых поясов
timedatectl list-timezones | grep -i moscow
Или для поиска по Европе:
timedatectl list-timezones | grep Europe
2. Установка часового пояса
Допустим, нам нужен пояс Europe/Moscow:
sudo timedatectl set-timezone Europe/Moscow
Проверяем:
timedatectl | grep "Time zone"
Ручная установка даты и времени
Иногда нужно выставить время вручную (например, на изолированном сервере без интернета). Используй команду timedatectl set-time.
Установка конкретной даты и времени
sudo timedatectl set-time "2024-12-24 15:30:00"
Формат строгий: ГГГГ-ММ-ДД ЧЧ:ММ:СС. После выполнения проверь:
date
Настройка синхронизации времени через NTP
Для точного времени нужна синхронизация с интернет-серверами. В Ubuntu за это отвечает systemd-timesyncd (или chrony в более тонких настройках).
1. Включение и проверка NTP
sudo timedatectl set-ntp true
timedatectl status | grep -E "synchronized|NTP"
2. Просмотр информации о синхронизации
timedatectl timesync-status
3. Настройка своих NTP-серверов (опционально)
Редактируем конфиг timesyncd:
sudo nano /etc/systemd/timesyncd.conf
Раскомментируй и измени строки:
[Time]
NTP=ntp1.stratum1.ru ntp2.stratum1.ru
FallbackNTP=ntp.ubuntu.com
Применяем изменения:
sudo systemctl restart systemd-timesyncd
sudo systemctl status systemd-timesyncd
Работа с аппаратными часами (RTC)
Аппаратные часы (Real Time Clock) сохраняют время при выключении питания. Важный момент — в каком формате они хранят время: UTC или локальном.
# Проверка текущего состояния
sudo hwclock --show
# Синхронизация системного времени с аппаратным
sudo hwclock --systohc
# Синхронизация аппаратного времени с системным
sudo hwclock --hctosys
Узнать, настроены ли RTC на локальное время:
timedatectl | grep "RTC in local TZ"
sudo timedatectl set-local-rtc 0
Сравнение методов управления временем
| Метод | Команда/Утилита | Когда использовать | Преимущества |
|---|---|---|---|
| Systemd (рекомендуется) | timedatectl | Ubuntu 16.04 и новее | Единый интерфейс, простота |
| Классический способ | date, hwclock | Старые системы, скрипты | Полный контроль, обратная совместимость |
| Расширенная NTP | chrony | Сервера точного времени | Точность, работа в оффлайн-режиме |
| Графический интерфейс | Settings → Date & Time | Desktop-версия Ubuntu | Удобно для новичков |
Частые проблемы и их решение
1. Время сбивается после перезагрузки
Скорее всего, проблема в RTC. Проверь и исправь:
# Проверяем текущее время RTC
sudo hwclock --show
# Устанавливаем правильное время в RTC из системных часов
sudo hwclock --systohc
# Убеждаемся, что RTC использует UTC
sudo timedatectl set-local-rtc 0
2. Расхождение между системным временем и временем в логах
Если в /var/log время отличается, проверь часовой пояс для службы журналирования:
# Для rsyslog
sudo nano /etc/rsyslog.conf
# Добавь или измени: $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
3. NTP не синхронизируется
Попробуй перезапустить службу и посмотреть логи:
sudo systemctl restart systemd-timesyncd
sudo journalctl -u systemd-timesyncd -n 50
Автоматизация настройки времени
Для DevOps-задач часто нужно автоматизировать настройку. Вот пример скрипта:
#!/bin/bash
# Автоматическая настройка времени для Ubuntu
set -e
echo "Установка часового пояса Europe/Moscow..."
sudo timedatectl set-timezone Europe/Moscow
echo "Включение NTP синхронизации..."
sudo timedatectl set-ntp true
echo "Настройка RTC на использование UTC..."
sudo timedatectl set-local-rtc 0
echo "Применение кастомных NTP серверов..."
sudo sed -i 's/^#NTP=/NTP=ntp1.stratum1.ru ntp2.stratum1.ru/' /etc/systemd/timesyncd.conf
sudo sed -i 's/^#FallbackNTP=/FallbackNTP=ntp.ubuntu.com/' /etc/systemd/timesyncd.conf
echo "Перезапуск службы времени..."
sudo systemctl restart systemd-timesyncd
echo "Текущий статус:"
timedatectl status
FAQ: ответы на частые вопросы
Как проверить, синхронизировано ли время с NTP?
Выполни команду timedatectl status и посмотри на строку "System clock synchronized". Если "yes" — всё в порядке.
Чем отличается timedatectl от команды date?
timedatectl — это высокоуровневая утилита systemd для управления временем и часовыми поясами. date — классическая Unix-команда для отображения и установки системного времени. Для современных Ubuntu рекомендую использовать timedatectl.
Как изменить время на Ubuntu Server без графического интерфейса?
Используй команды терминала, которые мы разобрали выше. Основные из них:
sudo timedatectl set-time "YYYY-MM-DD HH:MM:SS"— установка времениsudo timedatectl set-timezone Region/City— установка часового поясаsudo timedatectl set-ntp true— включение NTP
Почему время в Docker-контейнерах отличается от хоста?
По умолчанию контейнеры используют часовой пояс хоста, но могут иметь свою настройку. Проверь:
# В контейнере
cat /etc/timezone
date
# При запуске контейнера можно указать часовой пояс:
docker run -e TZ=Europe/Moscow your-image
Как настроить автоматическую синхронизацию времени при загрузке?
В современных Ubuntu это включено по умолчанию через systemd-timesyncd. Убедись, что служба активна:
sudo systemctl enable systemd-timesyncd
sudo systemctl start systemd-timesyncd
Заключение
Настройка времени на Ubuntu — базовая, но критически важная задача для любого системного администратора или разработчика. Запомни главное:
- Используй
timedatectlдля большинства операций в Ubuntu 16.04+ - Всегда храни аппаратные часы (RTC) в UTC
- Включай NTP-синхронизацию для серверов с доступом в интернет
- Проверяй часовой пояс после установки системы
- Для сложных сценариев рассмотри использование chrony вместо systemd-timesyncd
Правильно настроенное время — фундамент для корректной работы планировщиков задач, систем логирования, SSL-сертификатов и распределенных систем. Не пренебрегай этой, казалось бы, простой настройкой.