LinuxСредняя

systemctl: юнит не найден — как исправить ошибку Unit not found

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

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

Что означает ошибка "systemctl: юнит не найден"

Ошибка Failed to start unit: Unit not found (или просто Unit <имя> not found.) возникает, когда команда systemctl не может обнаружить указанный вами юнит (службу, таймер, сокет и т.д.) в каталогах, где systemd ищет конфигурационные файлы.

Симптомы:

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

Или:

$ sudo systemctl enable nginx
The unit files have no [Install] section. They cannot be enabled.

(Вторая ошибка — частый "родственник", когда файл есть, но в нём нет секции [Install] для enable).

Эта ошибка не означает, что служба сломанная. Она означает, что systemd вообще не знает о существовании такого юнита в данный момент.

Причины возникновения

  1. Неправильное или неполное имя юнита. Вы указали nginx, а systemd ищет nginx.service. Или опечатались в имени (ngnix.service).
  2. Файл службы (.service) отсутствует в системе. Вы пытаетесь управлять службой, которая никогда не была установлена или была удалена.
  3. Файл службы существует, но systemd не знает о нём. Файл .service лежит в /etc/systemd/system/ или /usr/lib/systemd/system/, но после его создания или копирования вы не выполнили systemctl daemon-reload.
  4. Юнит имеет другой тип. Вы пытаетесь запустить mytimer.timer командой systemctl start mytimer (без .timer), а systemd по умолчанию предполагает тип .service.
  5. Повреждённый или некорректный файл юнита. Файл существует, но имеет синтаксические ошибки, из-за чего systemd отказывается его загружать (часто сопровождается другой ошибкой, но может и маскироваться под "not found").

Способы решения

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

Это первый и самый важный шаг. Systemd очень чувствителен к именам.

  1. Получите полный список всех загруженных юнитов:
    systemctl list-units --type=service --all
    

    Флаг --all покажет даже неактивные (незапущенные) службы.
  2. Или получите список всех доступных файлов служб (даже тех, что не загружены):
    systemctl list-unit-files --type=service
    

    Этот команда показывает, какие службы systemd знает и может управлять ими.
  3. Используйте поиск, если не помните точное имя:
    systemctl list-unit-files --type=service | grep -i <часть_имени>
    # Пример: ищем всё, что связано с nginx
    systemctl list-unit-files --type=service | grep -i nginx
    

    Результат может быть:
    nginx.service                          enabled
    

    Правильное имя для команд — nginx.service.
  4. Если службы в списке нет — значит, systemd не обнаруживает соответствующий .service файл в стандартных каталогах (/etc/systemd/system/, /usr/lib/systemd/system/). Переходите к Способу 3.

⚠️ Важно: Всегда используйте полное имя с расширением (.service, .timer, .socket) для однозначности, особенно в скриптах.

Способ 2: Перезагрузите конфигурацию systemd (daemon-reload)

Если вы только что создали, скопировали или отредактировали файл службы (.service), systemd не знает об этих изменениях, пока вы явно не прикажете ему перечитать конфигурации.

  1. Выполните команду:
    sudo systemctl daemon-reload
    

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

Способ 3: Создайте или восстановите файл службы

Если после поиска (Способ 1) вы не нашли нужную службу, её файл отсутствует в системе.

  1. Определите, где должен лежать файл. Обычно:
    • /etc/systemd/system/ — для административных конфигураций и кастомных служб.
    • /usr/lib/systemd/system/ — для служб, поставляемых пакетами (управляемых пакетным менеджером).
  2. Создайте базовый файл службы. Например, для простого старта скрипта /opt/myapp/start.sh:
    sudo nano /etc/systemd/system/myapp.service
    

    Вставьте минимальный шаблон:
    [Unit]
    Description=My Custom Application
    After=network.target
    
    [Service]
    Type=simple
    ExecStart=/opt/myapp/start.sh
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target
    

    Сохраните и закройте редактор.
  3. Установите правильные права:
    sudo chmod 644 /etc/systemd/system/myapp.service
    
  4. Перезагрузите демон (Способ 2) и затем включите службу:
    sudo systemctl daemon-reload
    sudo systemctl enable myapp.service
    sudo systemctl start myapp.service
    
  5. Проверьте статус:
    sudo systemctl status myapp.service
    

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

Если файл службы есть, но systemctl упорно его не видит, возможно, в нём критическая синтаксическая ошибка.

  1. Проверьте файл на ошибки:
    sudo systemd-analyze verify /etc/systemd/system/<имя_службы>.service
    

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

    Убедитесь, что ссылка (если это ссылка) ведёт на существующий файл в /usr/lib/systemd/system/.
  3. Проверьте права на файл: systemd обычно требует, чтобы файлы служб принадлежали root и имели права 644 (чтение для всех, запись для владельца).

Профилактика

  • Всегда используйте systemctl daemon-reload после любого ручного создания, копирования или редактирования файлов .service, .timer, .socket.
  • Указывайте полное имя юнита.service) в скриптах и при автоматизации, чтобы избежать неоднозначностей.
  • Устанавливайте службы через пакетный менеджер (apt install nginx, dnf install httpd), когда это возможно. Пакеты автоматически размещают файлы в правильных каталогах и выполняют daemon-reload.
  • Проверяйте синтаксис нового файла службы через systemd-analyze verify перед попыткой его загрузить.
  • Храните кастомные файлы служб в /etc/systemd/system/, а не в /usr/lib/systemd/system/, чтобы они не перезаписывались при обновлении пакетов.
# Быстрая чек-лист при появлении ошибки:
# 1. systemctl list-unit-files --type=service | grep <имя>
# 2. Если нет файла -> создать (Способ 3)
# 3. Если файл есть -> sudo systemctl daemon-reload
# 4. sudo systemctl start <полное_имя>.service

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

Почему systemctl не находит мою службу, если файл .service есть в /etc/systemd/system?
Как правильно указать имя юнита в команде systemctl?
Может ли ошибка 'Unit not found' появиться из-за опечатки в имени?
Что делать, если файл службы есть, но systemctl всё равно говорит 'not found'?

Полезное

Проверьте точное имя службы
Выполните перезагрузку демона systemd
Попробуйте запустить службу с правильным именем
Включите службу для автозапуска (опционально)
Проверьте статус службы

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