SystemdDoctor
мешает работе окружение локали

Служба падает из-за локали

У службы нет переменных локали, которые есть в вашем сеансе. Программы, зависящие от локали, либо жалуются на неё, либо неверно работают с кириллицей — и в терминале эта проблема не воспроизводится.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Локаль не задана в unit-файле

    Служба не читает профиль. Переменные локали для неё пусты, и программа падает или переходит на язык по умолчанию.

  2. Нужная локаль не создана в системе

    Даже заданная переменная не поможет, если локаль не сгенерирована: программа сообщит, что не может её применить.

  3. Ожидается локаль, а нужна кодировка вывода

    Иногда проблема не в локали, а в том, что программа пишет в журнал в другой кодировке. Тогда в journalctl видны искажённые символы.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Общее окружение менеджера: там видно, задана ли локаль глобально.

systemctl show-environment

Какие локали созданы в системе.

locale -a | head -20

Системная локаль по данным systemd.

localectl status

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Локаль не задана в unit-файле
Почему происходит
Служба не читает профиль. Переменные локали для неё пусты, и программа падает или переходит на язык по умолчанию.
Как проверить
Посмотрите окружение службы.
systemctl show myapp.service -p Environment
systemctl show-environment | grep -i lang
Как исправить
Задайте локаль явно в unit-файле.
[Service]
Environment=LANG=ru_RU.UTF-8
Environment=LC_ALL=ru_RU.UTF-8
2. Нужная локаль не создана в системе
Почему происходит
Даже заданная переменная не поможет, если локаль не сгенерирована: программа сообщит, что не может её применить.
Как проверить
Посмотрите доступные локали.
locale -a | grep -i ru
locale 2>&1 | head
Как исправить
Создайте локаль средствами дистрибутива и перезапустите службу.
sudo locale-gen ru_RU.UTF-8 && sudo update-locale
3. Ожидается локаль, а нужна кодировка вывода
Почему происходит
Иногда проблема не в локали, а в том, что программа пишет в журнал в другой кодировке. Тогда в journalctl видны искажённые символы.
Как проверить
Посмотрите вывод и настройки программы.
journalctl -u myapp.service -n 10 --no-pager | cat -v | head
Как исправить
Настройте программу на вывод в UTF-8: журнал systemd работает с ним.

Пример вывода

Программа не может применить локаль. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.

myapp[4500]: warning: setlocale: LC_ALL: cannot change locale (ru_RU.UTF-8): No such file or directory
myapp[4500]: fatal: cannot format report: invalid locale

Связанные ошибки

Источники

  • localectl(1)
    Системная локаль и её настройка.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • systemd.exec(5)
    Окружение службы и переменные локали.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Проверено на службе, форматирующей отчёт по локали.
    собственная проверка, systemd 255
    сверено 15 сентября 2026