SystemdDoctor
служба не работает вывод логи права

status=222/STDERR в systemd

Код 222/STDERR — то же самое, что 209, но для потока ошибок: systemd не смог подготовить stderr согласно StandardError=. Разбирается он так же, разница только в том, какой из двух параметров смотреть.

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

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

  1. Каталог или файл из StandardError= недоступен

    Нет каталога, нет прав у пользователя службы, либо путь закрыт параметрами изоляции того же unit-файла.

  2. Значение не разбирается

    Как и у вывода, нужен префикс: file:, append:, truncate:, fd:. Путь без префикса недопустим.

  3. Указано inherit, а наследовать нечего

    При StandardError=inherit поток ошибок берётся из стандартного вывода. Если сам вывод настроить не удалось, следом падает и stderr.

Диагностика

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

Строка «Failed at step STDERR spawning» с причиной от ядра.

journalctl -xeu myapp.service --no-pager -n 30

Настройки обоих потоков и каталог журналов в одном выводе.

systemctl show myapp.service -p StandardOutput -p StandardError -p LogsDirectory

Решение

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

1. Каталог или файл из StandardError= недоступен
Почему происходит
Нет каталога, нет прав у пользователя службы, либо путь закрыт параметрами изоляции того же unit-файла.
Как проверить
Посмотрите значение и проверьте путь от имени пользователя службы.
systemctl show myapp.service -p StandardError -p User
sudo -u app sh -c 'echo проверка >> /var/log/myapp/err.log'
Как исправить
Создайте каталог с нужным владельцем, либо воспользуйтесь LogsDirectory=, либо оставьте StandardError=journal и читайте журнал.
2. Значение не разбирается
Почему происходит
Как и у вывода, нужен префикс: file:, append:, truncate:, fd:. Путь без префикса недопустим.
Как проверить
Сверьте значение.
systemctl show myapp.service -p StandardError
Как исправить
Исправьте запись на StandardError=append:/var/log/myapp/err.log или уберите параметр вовсе.
3. Указано inherit, а наследовать нечего
Почему происходит
При StandardError=inherit поток ошибок берётся из стандартного вывода. Если сам вывод настроить не удалось, следом падает и stderr.
Как проверить
Проверьте оба параметра вместе: часто в журнале сначала идёт отказ на шаге STDOUT.
systemctl show myapp.service -p StandardOutput -p StandardError
Как исправить
Сначала исправьте вывод, затем перезапустите службу: отдельная правка stderr тут ничего не даст.

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

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

× myapp.service - My application
     Active: failed (Result: exit-code) since Mon 2026-09-14 17:44:51 MSK; 1s ago
    Process: 12988 ExecStart=/usr/local/bin/myapp (code=exited, status=222/STDERR)

systemd[12988]: myapp.service: Failed at step STDERR spawning /usr/local/bin/myapp: Permission denied

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

Источники

  • systemd.exec(5)
    222 EXIT_STDERR: не удалось настроить поток ошибок, см. StandardError=.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено на файле, принадлежащем root, при User=app.
    собственная проверка, systemd 255
    сверено 15 сентября 2026