Перейти к содержимому
VDS · Операционные системы

Часовой пояс, локаль и язык системы

Как выставить часовой пояс, включить синхронизацию времени, настроить локаль UTF-8 и почему логи и базу стоит держать в UTC.

Обновлено 23 августа 2026 г.

Свежая машина обычно живёт в UTC и с минимальным набором локалей. Пока вы не читаете логи и не запускаете задачи по расписанию, это незаметно. Как только появляются cron, письма и отчёты — время и кодировка начинают значить многое.

Часовой пояс

timedatectl
timedatectl list-timezones | grep Moscow
timedatectl set-timezone Europe/Moscow

timedatectl показывает локальное время, UTC и состояние синхронизации. Строка System clock synchronized: yes означает, что часы подтягиваются по сети.

Если синхронизации нет:

timedatectl set-ntp true
systemctl status systemd-timesyncd

На AlmaLinux и CentOS Stream за время чаще отвечает chronyd:

systemctl enable --now chronyd
chronyc tracking

Локаль

Локаль задаёт язык сообщений, кодировку, формат чисел и дат. Обязательный минимум — UTF-8, иначе русские имена файлов и вывод программ превращаются в вопросительные знаки.

Debian и Ubuntu:

apt install -y locales
dpkg-reconfigure locales
localectl set-locale LANG=ru_RU.UTF-8

AlmaLinux и CentOS Stream:

dnf install -y glibc-langpack-ru
localectl set-locale LANG=ru_RU.UTF-8

Проверка:

locale
locale -a | grep -i utf

Изменения действуют для новых сеансов — перелогиньтесь по SSH.

Раскладка в консоли

Вид «Экран» (VNC) во вкладке «Консоль» панели /hosting/vds/m/<id> передаёт нажатия как есть. Если нужен ввод кириллицы прямо там:

localectl set-keymap ru

Службам это не нужно — им достаточно UTF-8.

Что оставить в UTC

Разумно держать в UTC саму систему и базу данных, а местное время показывать только людям.

  • Логи в UTC сравнимы между машинами и не прыгают при переводе часов.
  • База в UTC не ломает расчёты интервалов.
  • Cron считает время по системному поясу: сменили пояс — перечитайте расписания.
systemctl restart cron
crontab -l

Частые ошибки

СимптомПричинаРешение
setlocale: LC_ALL: cannot change localeКлиент присылает свою локаль, на сервере её нетСгенерировать локаль или убрать пересылку LANG у клиента
Кракозябры в именах файловЛокаль не UTF-8LANG=ru_RU.UTF-8 и новый вход
Время «уплыло» на минутыСинхронизация выключенаtimedatectl set-ntp true
Задача сработала не в тот часСменили пояс, расписание осталось прежнимПересчитать crontab

Меняйте пояс до того, как настроите резервные задачи и логирование. На живой машине смена пояса означает пересмотр всех расписаний разом.