status=208/STDIN в systemd
Код 208/STDIN значит, что systemd не сумел подготовить стандартный ввод процесса. У обычных служб ввод почти всегда null, поэтому этот код появляется там, где ввод настроили вручную: привязали к терминалу, к файлу или к сокету.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Указан терминал, которого нет
При
StandardInput=ttysystemd открываетTTYPath=(по умолчанию /dev/console). В контейнере или на машине без консоли открыть его нельзя. -
Файл из
StandardInput=file:отсутствует или недоступенФайл открывается на чтение под пользователем службы. Нет файла или нет прав — отказ на шаге STDIN.
-
Ввод привязан к сокету, которого нет
При
StandardInput=socketслужба должна запускаться сокет-активацией сAccept=yes. При ручном запуске сокета нет, и настроить ввод не из чего.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Показывает отказ на шаге STDIN и его причину.
journalctl -xeu myapp.service --no-pager -n 20Все настройки ввода вместе: сразу видно, откуда взялось нестандартное значение.
systemctl show myapp.service -p StandardInput -p TTYPath -p SocketsРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- При
StandardInput=ttysystemd открываетTTYPath=(по умолчанию /dev/console). В контейнере или на машине без консоли открыть его нельзя.
- Как проверить
-
Посмотрите значения и наличие устройства.
systemctl show myapp.service -p StandardInput -p TTYPath ls -l /dev/console
- Как исправить
-
Для служб, которым ввод не нужен, поставьте
StandardInput=null. Если программа действительно требует терминал, запускайте её не как службу, а через systemd-run с терминалом.
StandardInput=file: отсутствует или недоступен- Почему происходит
- Файл открывается на чтение под пользователем службы. Нет файла или нет прав — отказ на шаге STDIN.
- Как проверить
-
Проверьте путь и доступ от пользователя службы.
systemctl show myapp.service -p StandardInput sudo -u app head -c1 /var/lib/myapp/input.txt
- Как исправить
-
Создайте файл и дайте права на чтение либо передавайте данные иначе: через
StandardInputText=для короткого текста или через аргумент с путём.
- Почему происходит
- При
StandardInput=socketслужба должна запускаться сокет-активацией сAccept=yes. При ручном запуске сокета нет, и настроить ввод не из чего.
- Как проверить
-
Проверьте, есть ли связанный сокет-unit и активен ли он.
systemctl show myapp.service -p StandardInput -p Sockets systemctl status myapp.socket
- Как исправить
-
Запускайте службу через сокет (
systemctl start myapp.socket) либо уберите привязку ввода к сокету.
Пример вывода
Служба в контейнере с привязкой ввода к консоли. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
× myapp.service - My application
Active: failed (Result: exit-code) since Mon 2026-09-14 18:02:33 MSK; 1s ago
Process: 13400 ExecStart=/usr/local/bin/myapp (code=exited, status=208/STDIN)
systemd[13400]: myapp.service: Failed at step STDIN spawning /usr/local/bin/myapp: No such device or address
Связанные ошибки
- status=209/STDOUT в systemd Код 209/STDOUT: systemd не смог настроить стандартный вывод службы. Чаще всего виноват путь в StandardOutput=append: или file:.
- status=222/STDERR в systemd Код 222/STDERR: не удалось настроить поток ошибок службы. Разбор причин и отличие от кода 209.
- Служба не получает сокет при сокет-активации Сокет активен, служба запускается, но не находит переданный дескриптор. Разбор: Accept, FileDescriptorName, соответствие имён.
- status=202/FDS в systemd Код 202/FDS: systemd не смог закрыть лишние файловые дескрипторы или настроить переданные. Причины и проверка.
- Сокет и служба включены одновременно: конфликт при загрузке При сокет-активации в автозапуск включена и служба, и сокет. Порт занимает то, что стартовало первым.
- status=0/SUCCESS, но служба считается упавшей Программа завершилась успешно, а systemctl показывает inactive или failed. Разбор: Type=simple против forking, RemainAfterExit, демонизация.
- status=1/FAILURE в systemd Код 1/FAILURE означает, что программа запустилась и сама завершилась с ошибкой. Как найти настоящую причину в журнале службы.
- status=126 в systemd: файл не исполняется Код 126: команда найдена, но выполнить её нельзя. Отличие от 127 и от 203/EXEC, разбор причин.
Источники
-
systemd.exec(5)
208 EXIT_STDIN: не удалось настроить стандартный ввод, см. StandardInput=. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено с StandardInput=tty в контейнере без /dev/console.