Что означает ошибка systemctl command not found
Ошибка systemctl command not found возникает, когда вы пытаетесь выполнить команду systemctl в терминале Linux, но оболочка не может найти её в путях, указанных в переменной PATH. Это означает, что либо команда systemctl не установлена в системе, либо система использует другую ини-систему (init system), не связанную с systemd.
Полный текст ошибки обычно выглядит так:
bash: systemctl: command not found
Такая ошибка часто встречается в дистрибутивах, которые по умолчанию не используют systemd (например, Alpine Linux, Devuan), в минимальных установках, в контейнерах Docker, а также в Windows Subsystem for Linux (WSL) версии 1.
Причины возникновения
- Systemd не установлен: Ваш дистрибутив использует альтернативную ини-систему (SysVinit, OpenRC, runit). В этом случае команда
systemctlотсутствует. - Минимальная установка: Даже в дистрибутивах, обычно использующих systemd (Ubuntu, CentOS), при выборе минимального образа пакет
systemdможет не быть включён. - WSL1: Первая версия Windows Subsystem for Linux не включает systemd. Вместо этого используется собственная ини-система, совместимая с SysVinit.
- Контейнеры: Docker-образы и другие контейнеры часто не запускают systemd, чтобы уменьшить размер и ускорить старт.
- Изменённая переменная PATH: Редкий случай, когда systemd установлен, но каталог с
systemctl(обычно/usr/bin) не входит вPATH.
Способы решения
Способ 1: Проверьте, установлен ли systemd
Сначала определите, установлен ли пакет systemd в вашей системе.
Для Debian/Ubuntu и производных:
dpkg -l systemd 2>/dev/null | grep -i systemd
Если пакет не установлен, вывод будет пустым.
Для RHEL/CentOS/Fedora:
rpm -qa | grep -i systemd
Для Arch Linux:
pacman -Qs systemd
Если systemd не найден, переходите к способу 3.
Способ 2: Определите активную ини-систему
Даже если systemd установлен, система может использовать другую ини-систему. Выполните:
ps -p 1 -o comm=
- Если вывод
systemd— systemd активен, и проблема может быть вPATH(см. способ 4). - Если вывод
init— используется SysVinit. - Если вывод
runit— используется runit. - Если вывод
busybox— часто в Alpine Linux (OpenRC).
Способ 3: Используйте альтернативные команды управления службами
В зависимости от вашей ини-системы:
Для SysVinit (традиционные скрипты в /etc/init.d/):
sudo service <имя_службы> <действие>
# Пример: sudo service nginx start
Или напрямую:
sudo /etc/init.d/<имя_службы> <действие>
Для OpenRC (Alpine, Gentoo):
sudo rc-service <имя_службы> <действие>
# Пример: sudo rc-service docker start
Для runit:
sudo sv <действие> <каталог_службы>
# Пример: sudo sv start /etc/sv/nginx
Для WSL1: используйте service, как в SysVinit. Для автозапуска служб при старте WSL добавьте команды в ~/.bashrc или используйте /etc/rc.local.
Способ 4: Добавьте путь к systemctl в PATH (если systemd установлен, но не найден)
Если systemd установлен, но systemctl не находится в PATH, найдите его расположение:
sudo find /usr -name systemctl 2>/dev/null
Обычно systemctl находится в /usr/bin/systemctl. Если вы нашли его в другом каталоге (например, /usr/local/bin), добавьте этот каталог в PATH:
export PATH=$PATH:/путь/к/каталогу
Чтобы сделать изменение постоянным, добавьте строку в ~/.bashrc или ~/.profile и выполните source ~/.bashrc.
Способ 5: Установите systemd (если он не установлен, но нужен)
Внимание: Установка systemd в дистрибутив, который по умолчанию не использует systemd, может нарушить работу системы. Делайте это только если уверены в совместимости.
Для Debian/Ubuntu:
sudo apt update
sudo apt install systemd
Для RHEL/CentOS 7 и ниже:
sudo yum install systemd
Для RHEL/CentOS 8+ / Fedora:
sudo dnf install systemd
Для Arch Linux:
sudo pacman -S systemd
После установки перезагрузите систему и проверьте systemctl list-units.
Способ 6: Для WSL1: перейдите на WSL2
WSL2 (начиная с Windows 11 версии 22H2) поддерживает systemd. Если у вас Windows 11:
- Обновите WSL:
wsl --update - Установите WSL2 (если ещё не установлен):
wsl --set-default-version 2 - Установите дистрибутив с поддержкой systemd (например, Ubuntu 22.04+).
Если у вас Windows 10, WSL2 не поддерживает systemd. В этом случае используйте альтернативные команды (способ 3) или полноценную виртуальную машину.
Профилактика
- Перед выбором дистрибутива убедитесь, какая ини-система используется по умолчанию.
- В дистрибутивах с выбором ини-системы (Devuan) будьте внимательны при установке.
- При использовании Docker-контейнеров помните, что systemd обычно не запускается. Для управления службами внутри контейнера используйте команды, предоставляемые базовым образом (например,
service), или управляйте процессами напрямую. - В WSL1 планируйте переход на WSL2, если требуется systemd.
- Регулярно обновляйте систему, чтобы избежать конфликтов пакетов.