systemd Linux (systemd)

systemd: ExecStart выдаёт status=203/EXEC при существующем скрипте

  • Обновлено
  • Чтение ≈ 3 минуты

Краткий ответ

При status=203/EXEC systemd не смог выполнить команду ExecStart, даже если файл скрипта существует. Возможны неверный путь, отсутствие исполняемого интерпретатора, неподходящий shebang или запрет выполнения.

В этой статье
  1. Что происходит и когда это важно
  2. Возможные причины и как их отличить
  3. Пошаговая диагностика и исправление
  4. Команды из инструкции с пояснениями
  5. Как проверить результат
  6. Если проблема не устранена

#Что происходит и когда это важно

После старта служба немедленно падает с status=203/EXEC; программа внутри скрипта не успевает показать свои сообщения. Отдельно проверяйте код 127, если интерпретатор запустился, но не нашёл команду.

#Возможные причины и как их отличить

Возможная причинаКак узнатьЧто делать
Неверен путь к исполняемому файлуExecStart указывает старое расположение программы.ls по пути сообщает No such file.Исправить точный абсолютный путь.
Скрипт не имеет подходящего shebangЯдро не понимает, каким интерпретатором открыть файл.В первой строке нет #! или указан несуществующий интерпретатор.Проверить строку и существование программы.
Запрет исполненияНедостаточны x-права, noexec или политики доступа.Файл существует, но в журнале Permission denied.Различить права, mount и защиту, не применять chmod 777.
CRLF в shebangСкрипт перенесён из Windows с окончаниями CRLF.Интерпретатор выглядит как /bin/bash^M.Преобразовать окончания строк после резервной копии.

#Пошаговая диагностика и исправление

  1. Сверьте реальный ExecStartОткройте терминал. Выполните systemctl cat ИМЯ.service и systemctl show ИМЯ.service -p ExecStart; запишите полный путь. systemd не запускает ExecStart= через оболочку по умолчанию: &&, перенаправления и переменные не всегда работают как в интерактивном Bash.
  2. Изучите ошибку процессаВыполните systemctl status ИМЯ.service --no-pager и journalctl -u ИМЯ.service -b -n 60 --no-pager. Убедитесь, что код 203/EXEC, а не ошибка приложения с другим кодом. Запишите точное сообщение о файле.
  3. Проверьте существование и праваДля реального пути выполните ls -l /ПУТЬ/К/СКРИПТУ. Вывод должен содержать файл и биты исполнения, если требуется прямой запуск. Далее namei -l /ПУТЬ/К/СКРИПТУ позволяет увидеть доступ к родительским каталогам (если команда доступна). Не меняйте владельцев рекурсивно.
  4. Сверьте первую строку скриптаЕсли ExecStart указывает на скрипт, посмотрите только первую строку командой head -n 1 /ПУТЬ/К/СКРИПТУ. Для shell-скрипта обычна #!/bin/sh или #!/usr/bin/env bash при наличии интерпретатора. file /ПУТЬ/К/СКРИПТУ покажет формат и возможные CRLF. Не пытайтесь исполнять неизвестный скрипт от root ради проверки.
  5. Проверьте файловую систему и безопасностьЕсли указан правильный файл и есть исполняемый бит, выполните findmnt -T /ПУТЬ/К/СКРИПТУ. Опция noexec запрещает прямое выполнение на томе; это может быть преднамеренная мера безопасности. Не снимайте noexec со всего тома автоматически.
  6. Исправьте только подтверждённую причинуДля своего скрипта создайте резервную копию, поправьте shebang/конец строки или переместите файл в предусмотренный исполняемый каталог по согласованию. Если ошибка только в пути ExecStart, используйте sudo systemctl edit ИМЯ.service: в [Service] сначала пустой ExecStart=, затем новая правильная абсолютная команда. Не изменяйте пакетный unit на месте.
  7. Перечитайте и проверьтеАдминистратор выполнит sudo systemctl daemon-reload, затем согласованный restart. Проверьте status и функциональность приложения. Если ошибка осталась, верните прежнее переопределение и сохраните журнал.

#Команды из инструкции с пояснениями

Linux · Терминал (Bash)Команда
Чтение итогового пути запуска.
systemctl show ИМЯ.service -p ExecStart
Linux · Терминал (Bash)Команда
Проверка существования и прав, заменить пример.
ls -l /ПУТЬ/К/СКРИПТУ
Linux · Терминал (Bash)Команда
Проверка первой строки скрипта без запуска.
head -n 1 /ПУТЬ/К/СКРИПТУ
Linux · Терминал (Bash)Команда
Файловая система и флаг noexec.
findmnt -T /ПУТЬ/К/СКРИПТУ

#Как проверить результат

203/EXEC исчез, служба запускает именно нужный исполняемый файл и выполняет полезное действие без расширения прав системы.

#Если проблема не устранена

Если ошибка не связана с путём, правами или shebang, рассмотрите неподходящую архитектуру бинарного файла, отсутствующий динамический загрузчик или SELinux/AppArmor по сообщениям журнала.

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.