Один з найпотужніших та найзручніших інструментів для користувачів Linux, особливо сучасних дистрибутивів, таких як Ubuntu, — systemctl команда. Ця утиліта командного рядка зазвичай використовується для взаємодії з systemd, системою та менеджером служб.
За допомогою команди ви можете керувати системними службами, переглядати їх стан, запускати та зупиняти їх, а також включати та відключати їх під час запуску системи. Дійсно зручно, правда? Але якщо команда systemctl не знайдена або не розпізнана, ви зіткнетесь з «sudo: systemctl: команда не знайдена» помилка.
Отже, давайте поговоримо про те, що означає помилка «systemctl: команда не знайдена», різні причини, з яких ви стикаєтесь з цією помилкою, і як її виправити.
Що означає помилка systemctl: команда не знайдена?
Говорячи просто, помилка «systemctl: команда не знайдена» означає, що утиліта командного рядка 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 - це ваша система ініціалізації, і systemctl Ubuntu повинна бути встановлена. Однак якщо вихід показує 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. Перевірка шляху 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, до системи вашого сервера, використовуючи таку команду:
echo $PATH
Вихід повинен бути щось на кшталт:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Тепер все, що вам потрібно зробити, це перевірити, чи входить каталог, де знаходиться systemctl (який ви отримали з команди which), до переліку каталогів у виході команди echo $PATH.
Якщо каталог systemctl не включений до виходу echo $PATH, вам потрібно додати його до змінної PATH. Для цього запустіть таку команду:
Для Користувачі Bash shell, відкрийте файл ~/.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
Якщо попередні рішення не спрацювали і ви все ще отримуєте помилку про невідому команду, повна переустановка systemd може вирішити проблему. Для цього виконайте наступні команди:
sudo apt purge systemd sudo apt install systemd
Потім перезавантажте систему за допомогою цієї команди:
sudo reboot
Перевірте, чи працює systemctl.
5. Перевірка правильної конфігурації systemd
Іноді проблема може бути результатом неправильної конфігурації установки systemd, що призводить до помилки «systemctl: command not found». Щоб виправити цю проблему, виконайте наступну команду, і все буде готово:
sudo dpkg-reconfigure systemd
6. Застарілої Windows Subsystem for 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 available, оскільки неможливість використовувати утиліту командного рядка 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.