Linux 127Средняя

Ошибка "service command not found" в Linux: пошаговое решение

Эта статья объясняет, почему в Linux не работает команда service, и предлагает практические решения: установку необходимых пакетов, использование systemctl и настройку PATH.

Обновлено 15 февраля 2026 г.
5-10 мин
Низкая
FixPedia Team
Применимо к:Ubuntu 18.04 и вышеDebian 9 и вышеCentOS 7 и выше

Что означает ошибка 'service: command not found'

Ошибка service: command not found (или bash: service: command not found) возникает в Linux, когда вы пытаетесь выполнить команду service, но система не может найти её в каталогах, указанных в переменной PATH. Команда service используется для управления системными службами (запуск, остановка, перезагрузка) в дистрибутивах с init-системой System V или upstart. В современных системах на базе systemd её роль часто выполняет systemctl, но service может сохраняться для обратной совместимости.

Типичный сценарий: вы вводите sudo service nginx start и получаете сообщение об ошибке вместо управления службой. Это не означает проблему с самой службой (nginx), а указывает на отсутствие утилиты service в вашей системе.

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

  1. Пакет sysvinit-utils (или аналог) не установлен. В Debian/Ubinux команда service поставляется в пакете sysvinit-utils, который не устанавливается по умолчанию в минимальных или облачных образах. В CentOS/RHEL аналогичную функцию предоставляет пакет initscripts.
  2. Пакет повреждён или удалён. Если пакет был случайно удален или его файлы повреждены, команда перестаёт работать.
  3. Переменная PATH не включает системные каталоги. Команда service обычно находится в /sbin или /usr/sbin. Если эти каталоги отсутствуют в PATH (например, в пользовательском окружении без прав администратора), shell не сможет её найти.
  4. Система использует чисто systemd без совместимости. Некоторые современные дистрибутивы (например, fresh install Ubuntu 22.04) могут не включать service по умолчанию, предполагая использование systemctl.
  5. Ошибка в символьных ссылках. В systemd-системах service часто является символьной ссылкой на systemctl. Если ссылка сломана, команда не работает.

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

Способ 1: Установка пакета, предоставляющего service

Это наиболее прямой способ. Установите пакет, содержащий утилиту service, для вашего дистрибутива.

Для Ubuntu/Debian:

sudo apt update
sudo apt install sysvinit-utils

Для CentOS/RHEL (версии 7 и ниже, где используется System V):

sudo yum install initscripts

Для Fedora или CentOS 8+ (с systemd): Пакет initscripts может быть доступен, но часто service уже есть. Если нет, установите sysvinit-tools (если доступен) или используйте systemctl.

После установки проверьте:

which service

Ожидаемый вывод: /usr/sbin/service или аналогичный путь. Теперь команда должна работать.

Способ 2: Использование systemctl вместо service

Если ваша система работает под управлением systemd (что вероятно для Ubuntu 16.04+, Debian 8+, CentOS 7+), рекомендуется использовать systemctl — более современную и функциональную альтернативу.

Примеры замены команд:

# Вместо:
sudo service nginx start

# Используйте:
sudo systemctl start nginx

# Для проверки статуса:
sudo systemctl status nginx

# Для включения автозапуска:
sudo systemctl enable nginx

systemctl поддерживает все функции service и добавляет возможности вроде управления юнитами, просмотра журналов через journalctl и зависимостей. Перейдите на systemctl, чтобы избежать проблем с отсутствием service в будущем.

Способ 3: Проверка и исправление переменной PATH

Если пакет установлен, но команда всё равно не найдена, проблема может быть в переменной PATH.

  1. Проверьте текущий PATH:
    echo $PATH
    

    Убедитесь, что в выводе есть /sbin и /usr/sbin. Обычно они присутствуют в PATH для root, но могут отсутствовать для обычного пользователя.
  2. Если каталогов нет, добавьте их в PATH временно:
    export PATH=$PATH:/usr/sbin:/sbin
    

    Эта команда действует только в текущей сессии терминала.
  3. Для постоянного добавления отредактируйте файл ~/.bashrc (для пользователя) или /etc/profile (для всех пользователей):
    nano ~/.bashrc
    

    Добавьте строку:
    export PATH=$PATH:/usr/sbin:/sbin
    

    Затем примените изменения:
    source ~/.bashrc
    
  4. Перезапустите терминал и проверьте which service снова.

Способ 4: Восстановление повреждённого пакета

Если пакет установлен, но файл service отсутствует или повреждён, переустановите его:

Для Ubuntu/Debian:

sudo apt install --reinstall sysvinit-utils

Для CentOS/RHEL:

sudo yum reinstall initscripts

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

ls -l /usr/sbin/service

Он должен быть исполняемым (права -rwxr-xr-x).

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

Чтобы избежать повторения ошибки service command not found:

  • Устанавливайте базовые пакеты управления службами при развёртывании минимальных систем (например, в Docker-контейнерах или облачных образах). Для Debian/Ubuntu добавляйте sysvinit-utils в список пакетов.
  • Используйте systemctl в новых проектах. Поскольку большинство современных дистрибутивов перешло на systemd, привыкайте к systemctl — это гарантирует совместимость.
  • Регулярно обновляйте систему. sudo apt update && sudo apt upgrade или sudo yum update помогут избежать конфликтов пакетов.
  • Проверяйте PATH при настройке окружения. Если вы кастомизируете PATH в ~/.bashrc или /etc/environment, убедитесь, что не удаляете системные каталоги.
  • Для скриптов используйте полные пути. В автоматизированных скриптах вместо service укажите /usr/sbin/service или systemctl, чтобы не зависеть от PATH.

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

Почему возникает ошибка 'service command not found' в Linux?
Как проверить, установлен ли пакет service в моей системе?
Можно ли использовать systemctl вместо service?
Как установить команду service в Ubuntu?

Полезное

Проверьте наличие команды service
Определите ваш дистрибутив Linux
Установите пакет, предоставляющий команду service
Альтернативно: перейдите на systemctl
Обновите кэш команд или перезапустите терминал