LinuxFAQ.ru

Как исправить ошибку systemctl unit not found (Unit not found) в Linux

Столкнулись с ошибкой “Unit not found” при попытке запустить службу через systemctl start? Эта проблема может возникнуть как на рабочих станциях, так и на серверах Linux. В статье вы найдете простое и понятное пошаговое руководство по устранению ошибки — как для новичков, так и для системных администраторов.

Почему появляется ошибка “Unit not found”

  • Файл unit (службы, сервиса) отсутствует в системе — например, удалён или не установлен нужный пакет.
  • Unit-файл размещён не в стандартном каталоге systemd (/etc/systemd/system/ или /lib/systemd/system/).
  • Unit-файл повреждён, переименован или содержит ошибки в синтаксисе.
  • systemd не был уведомлён об изменениях (не выполнена перезагрузка конфигурации с помощью daemon-reload после добавления или редактирования unit-файлов).

Пошаговое решение

  1. Проверьте имя unit-файла
    Иногда ошибка возникает из-за опечатки. Выполните команду:

    systemctl list-units --type=service --all | grep <ВАШ_ЮНИТ>

    Замените <ВАШ_ЮНИТ> на название вашей службы, например nginx или apache2. Если нужная служба не отображается — переходите к следующему шагу.

  2. Проверьте наличие unit-файла на диске
    Убедитесь, что unit-файл существует в стандартных директориях:

    ls /etc/systemd/system/<ВАШ_ЮНИТ>.service /lib/systemd/system/<ВАШ_ЮНИТ>.service

    Если команда возвращает ошибку или файла нет, попробуйте найти похожие имена с помощью:
    ls /etc/systemd/system/ | grep <ВАШ_ЮНИТ> или ls /lib/systemd/system/ | grep <ВАШ_ЮНИТ>. Если файл отсутствует — переходите к шагу 3.

  3. Установите или переустановите пакет с unit-файлом
    Если unit-файл отсутствует, он, как правило, идёт в составе соответствующего пакета. Используйте пакетный менеджер вашей системы:

    sudo apt update
    sudo apt install --reinstall <ВАШ_ПАКЕТ>
    

    Для Debian/Ubuntu замените <ВАШ_ПАКЕТ> на имя пакета, например nginx. Для RHEL/CentOS можно использовать yum install --reinstall <ВАШ_ПАКЕТ> или dnf install --reinstall <ВАШ_ПАКЕТ>.

  4. Выполните daemon-reload
    После добавления или изменения unit-файлов обновите конфигурацию systemd:

    sudo systemctl daemon-reload

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

  5. Попробуйте запустить службу
    Выполните:

    sudo systemctl start <ВАШ_ЮНИТ>

    Если ошибок нет, значит служба успешно запущена. В противном случае — переходите к разделу с альтернативными методами.

Альтернативные методы

  • Просмотрите журналы systemd:
    Для поиска подробностей об ошибках выполните:

    journalctl -xe

    Обратите внимание на строки с упоминанием нужной службы — они помогут выявить проблемы, например, в самом unit-файле или зависимостях.

  • Создайте unit-файл вручную:
    Если нужного unit-файла нет и в официальных пакетах его нет, создайте простой сервис самостоятельно. Пример:

    [Unit]
    Description=Тестовая служба
    
    [Service]
    ExecStart=/usr/bin/your_command
    
    [Install]
    WantedBy=multi-user.target
    

    Сохраните этот файл по пути /etc/systemd/system/<ВАШ_ЮНИТ>.service, замените /usr/bin/your_command на команду запуска сервиса, затем выполните:
    sudo systemctl daemon-reload и sudo systemctl start <ВАШ_ЮНИТ>.

Проверка результата

  • Проверьте статус службы:

    systemctl status <ВАШ_ЮНИТ>

    В выводе должна быть строка Active: active (running) или подробные ошибки, если запуск не удался.

  • Проверьте список активных сервисов:

    systemctl list-units --type=service

    Ваш юнит должен отображаться в списке запущенных или загруженных сервисов.

Как избежать ошибки в будущем

  • Всегда проверяйте правильность имени unit-файла перед запуском или изменением.
  • После любых изменений в unit-файлах обязательно выполняйте systemctl daemon-reload.
  • Для установки сервисов используйте только официальные пакеты из проверенных репозиториев (apt, yum, dnf).
  • Регулярно делайте резервные копии пользовательских unit-файлов из директории /etc/systemd/system/.

FAQ

Вопрос:
Почему служба не появляется после установки пакета?

Иногда unit-файлы установлены, но имеют опечатки в имени или требуют переименования. Проверьте их наличие и имя с помощью команды ls и используйте systemctl daemon-reload.

Вопрос:
Можно ли восстановить unit-файлы без переустановки пакета?

Да. Если вы вносили изменения вручную, приведите файлы в исходное состояние и выполните sudo systemctl daemon-reload. Однако зачастую проще переустановить пакет через apt install --reinstall <пакет>.

Вопрос:
Где искать пользовательские unit-файлы?

Они обычно находятся в /etc/systemd/system/, а общесистемные — в /lib/systemd/system/.

В заключение: следуя этому руководству, вы сможете быстро устранить ошибку “Unit not found” при работе с systemctl. Для расширенного управления службами рекомендуем ознакомиться со статьей Как перезапустить службу systemd корректно.

Смотрите также

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Свежие материалы