status=222/STDERR в systemd
Код 222/STDERR — то же самое, что 209, но для потока ошибок: systemd не смог подготовить stderr согласно StandardError=. Разбирается он так же, разница только в том, какой из двух параметров смотреть.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Каталог или файл из
StandardError=недоступенНет каталога, нет прав у пользователя службы, либо путь закрыт параметрами изоляции того же unit-файла.
-
Значение не разбирается
Как и у вывода, нужен префикс: file:, append:, truncate:, fd:. Путь без префикса недопустим.
-
Указано
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Решение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
StandardError= недоступен- Почему происходит
- Нет каталога, нет прав у пользователя службы, либо путь закрыт параметрами изоляции того же unit-файла.
- Как проверить
-
Посмотрите значение и проверьте путь от имени пользователя службы.
systemctl show myapp.service -p StandardError -p User sudo -u app sh -c 'echo проверка >> /var/log/myapp/err.log'
- Как исправить
-
Создайте каталог с нужным владельцем, либо воспользуйтесь
LogsDirectory=, либо оставьтеStandardError=journalи читайте журнал.
- Почему происходит
- Как и у вывода, нужен префикс: file:, append:, truncate:, fd:. Путь без префикса недопустим.
- Как проверить
-
Сверьте значение.
systemctl show myapp.service -p StandardError
- Как исправить
-
Исправьте запись на
StandardError=append:/var/log/myapp/err.logили уберите параметр вовсе.
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
Связанные ошибки
- status=209/STDOUT в systemd Код 209/STDOUT: systemd не смог настроить стандартный вывод службы. Чаще всего виноват путь в StandardOutput=append: или file:.
- Permission denied в журнале службы Отказ в доступе у службы systemd: права на файл, каталоги по пути, пользователь службы, параметры изоляции, SELinux и AppArmor.
- status=240/LOGS_DIRECTORY в systemd Код 240/LOGS_DIRECTORY: не удалось подготовить каталог журналов службы в /var/log из LogsDirectory=.
- Почтовая служба пишет в аварийный журнал и не принимает письма Служба сообщает о невозможности писать журналы или создавать файлы очереди: права на каталоги нарушены.
- AppArmor: apparmor="DENIED" в журнале ядра Профиль AppArmor запретил операцию: как прочитать запись, найти профиль и поправить его правильно.
- Broken pipe в журнале службы Запись в закрытый канал или соединение: клиент отключился, обработчик завершился, конвейер разорван.
- Caddy не занимает порты 80 и 443 без прав Служба падает при открытии слушателя: нет возможности занимать привилегированные порты.
- Configuration file is marked executable Предупреждение о правах: unit-файл помечен исполняемым. Откуда берётся и почему это стоит исправить.
Источники
-
systemd.exec(5)
222 EXIT_STDERR: не удалось настроить поток ошибок, см. StandardError=. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено на файле, принадлежащем root, при User=app.