Один из самых мощных и удобных инструментов для пользователей Linux, особенно современных дистрибутивов вроде Ubuntu, — команда systemctl. Эта утилита командной строки используется для взаимодействия с systemd — системным менеджером служб и процессов.
С помощью этой команды можно управлять системными службами: просматривать их статус, запускать и останавливать, а также включать и отключать автозапуск при старте системы. Удобно, не правда ли? Но если команда systemctl не найдена или не распознаётся, вы столкнётесь с «sudo:systemctl: command not found» ошибка.
Давайте разберёмся, что означает ошибка «systemctl: command not found», почему она возникает и как её устранить.
Что означает ошибка «systemctl: команда не найдена»?
Если говорить прямо, ошибка «systemctl: command not found» означает, что утилита командной строки systemctl недоступна в текущей среде. Причин может быть несколько, и все они сводятся к одному из двух: либо вы работаете не в системной среде, либо пакет systemd просто не установлен.
По всей видимости, пакет systemd не установлен, либо ваш дистрибутив или версия Linux не использует systemd — вместо него используется более старая система управления службами, например init.d. Ещё одна возможная причина: переменная окружения PATH не содержит директорию, в которой находится systemctl, из-за чего оболочка не может его найти.
Теперь, когда вы представляете, что может вызывать ошибку «systemctl: command not found», разберёмся, как определить причину и устранить её.
Устранение ошибки systemctl: Command Not Found
В следующих шагах мы проверим, установлен ли в системе systemd и доступна ли команда systemctl, а также убедимся, что путь к systemctl прописан корректно. После диагностики перейдём к исправлению ошибки.
1. Проверка: использует ли система systemd
Поскольку Ubuntu systemctl работает только при наличии пакета systemd, сначала проверим, должна ли ваша система использовать systemd. Выполните следующую команду:
ps -p 1 -o comm=
Или проверьте версию systemd такой командой:
systemd --version
Если вывод — systemd, значит systemd является вашей системой инициализации и Ubuntu systemctl должен быть установлен. Если же вывод — init или другой менеджер процессов, значит система использует альтернативную систему инициализации, и systemctl не будет работать без миграции на systemd.
Если вы видите устаревшие системы инициализации, например Upstart или SysVinit, и хотите перейти на systemd для использования systemctl, выполните следующие шаги:
1. Установите systemctl, установив systemd с помощью следующей команды:
sudo apt install systemd-sysv
2. Перезагрузите систему, выполнив эту команду:
sudo reboot
3. Убедитесь, что система теперь использует systemd:
ps -p 1 -o comm=
Вывод должен быть systemd.
2. Проверка корректности установки systemd
В норме, когда systemd установлен и работает как система инициализации, команда systemctl должна функционировать без проблем. Если это не так, значит пакет systemd либо отсутствует, либо установлен некорректно.
Обратите внимание: если вы используете минимальный образ Ubuntu, например контейнер Docker или облачный инстанс, systemd может не быть установлен по умолчанию. Чтобы установить systemctl через установку systemd, выполните следующие команды:
sudo apt update sudo apt install systemd
После установки проверьте, доступна ли команда systemctl.
3. Проверка PATH для systemctl
Одна из распространённых причин ошибки «systemctl not found» — systemctl установлен, но отсутствует в переменной PATH. Чтобы проверить, есть ли бинарные файлы systemd в стандартных директориях, таких как /bin, /usr/bin или /usr/local/bin, выполните следующую команду:
which systemctl
Если systemctl найден в одной из директорий, перечисленных в PATH, вывод будет примерно таким:
/usr/bin/systemctl
Если systemctl не найден ни в одной из директорий PATH, команда which ничего не вернёт.
Однако systemctl может не работать, даже если он найден в ваших директориях. Причина в том, что systemctl может находиться в директории, которая не включена в PATH. В этом случае нужно проверить, является ли директория с systemctl частью PATH вашей системы, выполнив следующую команду:
echo $PATH
Вывод должен выглядеть примерно так:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Теперь нужно проверить, включена ли директория, в которой находится systemctl (полученная с помощью команды which), в список директорий из вывода команды echo $PATH.
Если директория systemctl отсутствует в выводе echo $PATH, её нужно добавить в переменную PATH. Для этого выполните следующую команду:
По Пользователи Bash, откройте файл ~/.bashrc в текстовом редакторе:
nano ~/.bashrc
Добавьте следующую строку в конец файла:
export PATH=$PATH:/usr/bin
/usr/bin — типичный каталог, в котором в данном примере находится systemctl.
Сохраните и закройте файл: нажмите CTRL + X, затем Y для подтверждения и Enter для сохранения.
По Пользователи Zsh, откройте файл ~/.zshrc в текстовом редакторе:
nano ~/.zshrc
Добавьте следующую строку в конец файла:
export PATH=$PATH:/usr/bin
/usr/bin — типичный каталог, в котором в данном примере находится systemctl.
Сохраните и закройте файл: нажмите CTRL + X, затем Y для подтверждения и Enter для сохранения.
После выполнения всех шагов выше выполните команду echo $PATH, чтобы убедиться, что каталог systemctl добавлен в PATH. После этого вы сможете запускать systemctl без ошибки «systemctl: command not found».
4. Переустановка systemd
Если предыдущие способы не помогли и ошибка command not found по-прежнему появляется, попробуйте полностью переустановить systemd. Для этого выполните следующие команды:
sudo apt purge systemd sudo apt install systemd
Затем перезагрузите систему командой:
sudo reboot
Проверьте, работает ли systemctl.
5. Проверка корректности настройки systemd
Иногда причиной ошибки «systemctl: command not found» может быть некорректная установка systemd. Чтобы исправить это, достаточно выполнить следующую команду:
sudo dpkg-reconfigure systemd
6. Устаревшая подсистема Windows для Linux (WSL)
Если вы запускаете Ubuntu в WSL (Windows подсистема для Linux) учтите, что старые версии WSL, в частности WSL 1, не поддерживают systemctl нативно. Ни один из перечисленных выше способов не поможет запустить systemctl в таком окружении.
Чтобы использовать функции systemctl, нужно перейти на WSL 2: в нём поддержка systemd значительно лучше. Если вы не уверены, используете ли вы WSL, проверьте это следующей командой:
uname -a
Если в выводе упоминается WSL, именно это и является причиной ошибки «systemctl: command not found».
7. Использование sudo service как альтернативы systemctl
Если ошибка «systemctl: command not found» возникает из-за того, что ваша система не использует systemd, для управления службами можно воспользоваться командой sudo service. Она работает со старыми системами инициализации, такими как SysVinit и Upstart, и подходит для систем Ubuntu, которые опираются на init-скрипты вместо systemd.
Например, чтобы запустить службу, выполните:
sudo service <service_name> start
Заключение
systemd и его утилита командной строки systemctl вытеснили большинство старых систем инициализации, в том числе SysVinit и Upstart. Монолитная архитектура systemd и отступление от философии Unix нравятся не всем, однако именно systemd остаётся наиболее распространённым выбором. Надеемся, что вам удалось устранить ошибку «systemctl: command not found»: без этой утилиты возможности systemd существенно ограничены.
Часто задаваемые вопросы
Что такое systemctl и что означает ошибка «systemctl: command not found»?
systemctl — инструмент командной строки для управления службами в системах Linux, работающих на systemd, например Ubuntu. Ошибка «systemctl: command not found» возникает, когда утилита недоступна: как правило, это означает, что система не использует systemd или пакет systemd не установлен.
systemctl доступен на всех версиях Ubuntu?
Нет, systemctl доступен не на всех версиях Ubuntu. systemctl входит в состав системы инициализации systemd, которая используется по умолчанию в большинстве современных версий Ubuntu (начиная с 15.04). В более старых версиях или в некоторых минимальных установках могут использоваться альтернативные системы инициализации — SysVinit или Upstart.