Столкнулись с ошибкой “Unit not found” при попытке запустить службу через systemctl start? Эта проблема может возникнуть как на рабочих станциях, так и на серверах Linux. В статье вы найдете простое и понятное пошаговое руководство по устранению ошибки — как для новичков, так и для системных администраторов.
Почему появляется ошибка “Unit not found”
- Файл unit (службы, сервиса) отсутствует в системе — например, удалён или не установлен нужный пакет.
- Unit-файл размещён не в стандартном каталоге systemd (
/etc/systemd/system/или/lib/systemd/system/). - Unit-файл повреждён, переименован или содержит ошибки в синтаксисе.
- systemd не был уведомлён об изменениях (не выполнена перезагрузка конфигурации с помощью
daemon-reloadпосле добавления или редактирования unit-файлов).
Пошаговое решение
- Проверьте имя unit-файла
Иногда ошибка возникает из-за опечатки. Выполните команду:systemctl list-units --type=service --all | grep <ВАШ_ЮНИТ>Замените
<ВАШ_ЮНИТ>на название вашей службы, напримерnginxилиapache2. Если нужная служба не отображается — переходите к следующему шагу. - Проверьте наличие unit-файла на диске
Убедитесь, что unit-файл существует в стандартных директориях:ls /etc/systemd/system/<ВАШ_ЮНИТ>.service /lib/systemd/system/<ВАШ_ЮНИТ>.serviceЕсли команда возвращает ошибку или файла нет, попробуйте найти похожие имена с помощью:
ls /etc/systemd/system/ | grep <ВАШ_ЮНИТ>илиls /lib/systemd/system/ | grep <ВАШ_ЮНИТ>. Если файл отсутствует — переходите к шагу 3. - Установите или переустановите пакет с unit-файлом
Если unit-файл отсутствует, он, как правило, идёт в составе соответствующего пакета. Используйте пакетный менеджер вашей системы:sudo apt update sudo apt install --reinstall <ВАШ_ПАКЕТ>Для Debian/Ubuntu замените
<ВАШ_ПАКЕТ>на имя пакета, напримерnginx. Для RHEL/CentOS можно использоватьyum install --reinstall <ВАШ_ПАКЕТ>илиdnf install --reinstall <ВАШ_ПАКЕТ>. - Выполните
daemon-reload
После добавления или изменения unit-файлов обновите конфигурацию systemd:sudo systemctl daemon-reloadЭта команда перечитает все unit-файлы и применит последние изменения. Это обязательный шаг после ручного копирования или редактирования unit-файлов.
- Попробуйте запустить службу
Выполните: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 корректно.