Linux unit not foundСредняя

Ошибка systemd: unit not found — причины и способы исправления

Статья подробно разбирает ошибку 'Failed to start [service]. Unit not found' в systemd. Вы узнаете, почему systemctl не видит службу, и получите пошаговые инструкции по поиску существующих юнитов, исправлению путей и созданию корректных конфигурационных файлов.

Обновлено 16 февраля 2026 г.
5-10 мин
Низкая
FixPedia Team
Применимо к:systemd v245+Ubuntu 20.04+Debian 11+CentOS 8+Fedora 35+

Что значит ошибка "unit not found" в systemd?

Ошибка Failed to start <имя_службы>.service: Unit not found. (или просто Unit <имя> not found.) возникает, когда демон systemd не может найти конфигурационный файл (юнит) с указанным вами именем в своих каталогах. Systemd ищет файлы служб (с расширением .service) в стандартных путях, таких как /etc/systemd/system/ (администраторские переопределения) и /usr/lib/systemd/system/ (пакетные файлы).

Типичный полный текст ошибки:

$ sudo systemctl start myapp.service
Failed to start myapp.service: Unit not found.

Эта ошибка возникает при попытке start, stop, restart, enable или disable службы, которую systemd не знает.

Основные причины ошибки

  1. Неправильное имя службы. Вы указали имя, не соответствующее имени файла (например, systemctl start nginx вместо systemctl start nginx.service, или с опечаткой).
  2. Файл службы отсутствует в каталогах systemd. Файл .service физически не находится в /etc/systemd/system/ или /usr/lib/systemd/system/.
  3. Система не перечитала конфигурации. Вы создали или скопировали файл службы, но не выполнили systemctl daemon-reload. Systemd работает со статическим кэшем при запуске.
  4. Неправильное расположение файла. Файл лежит не в каталоге, который systemd сканирует (например, в /root/ или /home/user/).
  5. Повреждённый или некорректный файл службы. Файл существует, но имеет синтаксические ошибки или отсутствуют обязательные секции (хотя это чаще вызывает другие ошибки при загрузке).
  6. Конфликт имён. Существует несколько файлов с одинаковым именем в разных каталогах, и systemd выбирает не тот (реже).

Способы решения ошибки "unit not found"

Способ 1: Проверьте точное имя и найдите юнит

Перед всем убедитесь, что вы используете правильное имя. Systemd часто может добавить .service автоматически, но лучше явно указывать.

  1. Поиск существующих служб. Выполните команду для поиска по части имени:
    systemctl list-unit-files --type=service --all | grep -i <часть_имени_службы>
    

    Флаг --all показывает также отключённые и неактивные юниты. Пример:
    systemctl list-unit-files --type=service --all | grep -i nginx
    

    Вывод:
    nginx.service                         enabled
    

    Если ничего не выводится, служба с таким именем не зарегистрирована в systemd.
  2. Попробуйте полный путь. Если вы знаете, где лежит файл, укажите его абсолютный путь:
    sudo systemctl start /etc/systemd/system/myapp.service
    

Способ 2: Перезагрузите демон systemd (daemon-reload)

Это самая частая причина и решение после создания нового файла службы.

  1. После создания или копирования файла .service в /etc/systemd/system/ выполните:
    sudo systemctl daemon-reload
    

    Эта команда заставляет systemd перечитать все конфигурационные файлы из стандартных каталогов и обновить свой внутренний менеджер юнитов.
  2. После этого повторите команду запуска/включения:
    sudo systemctl start myapp.service
    # или
    sudo systemctl enable myapp.service
    

Способ 3: Убедитесь, что файл службы существует и имеет правильное имя

  1. Проверьте наличие файла. Перейдите в каталоги systemd и найдите ваш файл:
    ls -l /etc/systemd/system/*.service
    ls -l /usr/lib/systemd/system/*.service
    

    Файл должен существовать в одном из этих каталогов (или их подкаталогах). Обычно административные службы кладут в /etc/systemd/system/.
  2. Проверьте имя файла. Имя файла должно заканчиваться на .service и в команде systemctl вы используете это имя без пути, но с расширением (или без — systemd добавит).
    • Правильно: sudo systemctl start myapp.service для файла myapp.service.
    • Неправильно: sudo systemctl start myapp (если нет другого юнита с таким именем) или sudo systemctl start myapp. (с точкой).

Способ 4: Создайте корректный файл службы

Если службы действительно нет, её нужно создать.

  1. Создайте файл в /etc/systemd/system/ (требуются права root):
    sudo nano /etc/systemd/system/myapp.service
    
  2. Добавьте минимальную рабочую конфигурацию. Замените /usr/bin/myapp на реальный путь к исполняемому файлу вашего приложения.
    [Unit]
    Description=My Custom Application
    After=network.target
    
    [Service]
    Type=simple
    ExecStart=/usr/bin/myapp --config /etc/myapp/config.conf
    Restart=on-failure
    RestartSec=5s
    
    [Install]
    WantedBy=multi-user.target
    
    • [Unit] — метаданные и зависимости.
    • [Service] — как запускать процесс.
    • [Install] — как включить (символические ссылки для enable).
  3. Сохраните файл и выполните Способ 2 (daemon-reload), а затем Способ 1 (проверьте имя) и запустите:
    sudo systemctl daemon-reload
    sudo systemctl start myapp.service
    sudo systemctl enable myapp.service  # для автозапуска
    

Способ 5: Проверьте синтаксис и права файла

Иногда systemd может "не видеть" файл из-за проблем с правами или синтаксисом.

  1. Проверьте синтаксис. Systemd может проверить конфиг без загрузки:
    sudo systemd-analyze verify /etc/systemd/system/myapp.service
    

    Если вывод пуст — синтаксис корректен. При ошибках он укажет строку и проблему.
  2. Проверьте права. Файл должен быть доступен для чтения root:
    ls -l /etc/systemd/system/myapp.service
    

    Ожидаемый вывод: -rw-r--r-- 1 root root ... myapp.service. Если права другие, исправьте:
    sudo chmod 644 /etc/systemd/system/myapp.service
    sudo chown root:root /etc/systemd/system/myapp.service
    

Профилактика ошибки "unit not found"

  • Всегда выполняйте systemctl daemon-reload после любого создания, удаления или изменения файлов служб в /etc/systemd/system/ или /usr/lib/systemd/system/.
  • Используйте стандартные пути. Не храните файлы .service в случайных каталогах. Только /etc/systemd/system/ (для локальных настроек) и /usr/lib/systemd/system/ (для пакетов).
  • Соблюдайте соглашение об именах. Имя файла должно быть осмысленным и заканчиваться на .service. Избегайте пробелов и спецсимволов в имени.
  • Проверяйте конфигурацию перед загрузкой. Используйте systemd-analyze verify для проверки синтаксиса нового файла.
  • Используйте systemctl status для диагностики. Если служба "установлена" (enable), но не запускается, команда sudo systemctl status myapp.service покажет её текущее состояние и последние логи, что поможет выявить другие проблемы (например, permission denied или failed to start).

Часто задаваемые вопросы

Почему systemctl говорит 'Unit not found', если файл службы есть в /etc/systemd/system?
Как правильно назвать файл службы для systemd?
Чем отличается `systemctl enable` от `systemctl start` в контексте этой ошибки?

Полезное

Проверьте точное имя юнита
Обновите кэш конфигураций systemd
Убедитесь в наличии и корректности файла юнита
Проверьте права доступа к файлу
Попробуйте полный путь к юниту

Эта статья помогла вам решить проблему?