Часто вы можете столкнуться с ошибкой «systemctl: command not found» при попытке запустить команду systemctl
. Это может быть не так для всех дистрибутивов Linux, но вы, вероятно, можете столкнуться с этой ошибкой, если используете старую версию дистрибутива Linux, которая не поддерживает команду systemctl
.
Проблема, с которой вы столкнулись, очень распространена и может быть легко устранена. Так что не волнуйтесь и просто пройдите полное руководство, чтобы найти быстрое и простое решение.
Мы постараемся сначала понять проблему, а затем решить ее.
Взгляд в будущее systemctl
и systemd
Поскольку ошибка связана с командой systemctl
, было бы неплохо знать основы этой команды, чтобы лучше понять, как исправить эту ошибку.
systemctl
— это утилита командной строки, предлагаемая Linux, которая используется для мониторинга и управления другой утилитой командной строки под названием systemd
. Она также проверяет и управляет системным менеджером вместе с утилитой systemd
.
Общий синтаксис:
systemctl [option] [name]
systemd
представляет собой набор демонов, библиотек и утилит, который управляет программами, запускаемыми при загрузке системы. Также systemd
может инициировать важную задачу, например, начать ведение журнала активности системы.
Эта утилита функционирует как центральная утилита управления для большинства, если не для всех, операционных систем на базе Linux.
Основная причина ошибки
Наиболее вероятной причиной этой ошибки может быть то, что вы используете более старую версию дистрибутива Linux. Многие из старых версий используют SysV init
вместо утилиты systemd
.
Утилита systemd
отсутствует в предыдущих версиях Linux, так как является недавним дополнением к корзине утилит, предоставляемых Linux. systemctl
совместима по функциям и мониторингу с утилитой systemd
и не будет работать с предыдущими конфигурациями, такими как SysV
init
или Upstart
.
Если вы не используете systemd
, то эта ошибка ожидаема. Это так просто и понятно.
Вы можете столкнуться с этой ошибкой следующим образом.
gaurav@ubuntu:~$ sudo systemctl start ufw
[sudo] password for gaurav:
sudo: systemctl: command not found
gaurav@ubuntu:~$
Здесь мы попытались запустить брандмауэр Ubuntu (ufw
) с помощью команды systemctl
и столкнулись с ошибкой «systemctl: команда не найдена».
Итак, что делать сейчас, если вы не хотите менять свой текущий дистрибутив Linux, который использует какую-то другую центральную утилиту управления, отличную от systemd
? Что ж, у нас есть для вас быстрое решение, которое позволит вам сохранить свой текущий дистрибутив Linux, а также исправить ошибку в кратчайшие сроки.
Давайте теперь посмотрим, как это исправить.
Исправление ошибки «systemctl: команда не найдена»
Наконец, давайте теперь рассмотрим решение рассматриваемой проблемы после анализа причин и основных фактов о проблеме.
Исправление 1: Замена systemctl
командой service
Простым решением данной ошибки является использование команды service
вместо команды systemctl
, вызывающей ошибку.
Команда service
помогает запустить скрипт SystemV init
, который используется в старых дистрибутивах Linux. Если вы не хотите устанавливать утилиту systemd
в своей системе, это исправление наверняка сработает для вас.
С помощью этой команды вы можете запускать, перезапускать или останавливать любые службы и демоны в вашем дистрибутиве Linux service
.
Команда service
и команда systemctl
функционируют одинаково, единственное отличие здесь — совместимость команды с утилитами, которые отвечают за корректную работу вашей системы.
Давайте рассмотрим команду service
с иллюстрацией.
Общий синтаксис:
sudo service [service_name] [action]
В приведенном выше синтаксисе [action]
пробел может включать такие действия start
, как stop
, restart
или status
.
Мы выполним ту же команду для запуска службы ufw
с помощью команды service
.
sudo service ufw start
Вывод:
gaurav@ubuntu:~$ sudo service ufw start
gaurav@ubuntu:~$ sudo service ufw status
● ufw.service - Uncomplicated firewall
Loaded: loaded (/lib/systemd/system/ufw.service; enabled; vendor preset: enab
Active: active (exited) since Mon 2020-09-28 11:22:34 IST; 1h 5min ago
Docs: man:ufw(8)
Process: 333 ExecStart=/lib/ufw/ufw-init start quiet (code=exited, status=0/SU
Main PID: 333 (code=exited, status=0/SUCCESS)
Sep 28 11:22:34 ubuntu systemd[1]: Started Uncomplicated firewall.
Warning: Journal has been rotated since unit was started. Log output is incomple
Здесь команда service
используется вместо команды systemctl
и все работает абсолютно нормально.
Давайте рассмотрим еще один пример команды, чтобы service
лучше ее понять.
sudo service apache2 start
Выход:
gaurav@ubuntu:~$ sudo service apache2 status
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset:
Drop-In: /lib/systemd/system/apache2.service.d
└─apache2-systemd.conf
Active: active (running) since Mon 2020-09-28 11:22:47 IST; 1h 16min ago
Process: 1172 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCE
Main PID: 1248 (apache2)
Tasks: 55 (limit: 4456)
CGroup: /system.slice/apache2.service
├─1248 /usr/sbin/apache2 -k start
├─1249 /usr/sbin/apache2 -k start
└─1250 /usr/sbin/apache2 -k start
Sep 28 11:22:43 ubuntu systemd[1]: Starting The Apache HTTP Server...
Sep 28 11:22:47 ubuntu apachectl[1172]: AH00112: Warning: DocumentRoot [/var/www
Sep 28 11:22:47 ubuntu apachectl[1172]: AH00558: apache2: Could not reliably det
Sep 28 11:22:47 ubuntu systemd[1]: Started The Apache HTTP Server.
gaurav@ubuntu:~$
Мы использовали команду service
для запуска утилиты apache2. Использование опции status
с командой service
отобразит текущий статус службы. Мы получим сведения о том, запущена ли она или мертва (неактивна).
Давайте теперь воспользуемся действием stop
для остановки службы apache2 с помощью команды service
.
gaurav@ubuntu:~$ sudo service apache2 stop
gaurav@ubuntu:~$ sudo service apache2 status
lines 1--1...skipping...
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/apache2.service.d
└─apache2-systemd.conf
Active: inactive (dead) since Mon 2020-09-28 12:42:06 IST; 1s ago
Process: 4928 ExecStop=/usr/sbin/apachectl stop (code=exited, status=0/SUCCESS)
Process: 1172 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
Main PID: 1248 (code=exited, status=0/SUCCESS)
Sep 28 11:22:43 ubuntu systemd[1]: Starting The Apache HTTP Server...
Sep 28 11:22:47 ubuntu apachectl[1172]: AH00112: Warning: DocumentRoot [/var/www/html] does not exist
Sep 28 11:22:47 ubuntu apachectl[1172]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using::1. Set the 'S
Sep 28 11:22:47 ubuntu systemd[1]: Started The Apache HTTP Server.
Из подробных примеров, описанных выше, можно сделать вывод, что мы можем использовать эту команду вместо команды systemctl
для управления и мониторинга других демонов и служб в дистрибутиве Linux.
Исправление 2: Проверка наличия пакета systemd
Иногда может быть так, что только установка systemd
пакета может исправить проблему. Сначала вам нужно проверить статус установки пакета systemd
в вашей системе.
Используйте следующую команду для проверки пакета в вашей системе.
sudo dpkg -l | grep systemd
Если утилита systemd
уже установлена, вы получите вывод, аналогичный показанному ниже.
gaurav@ubuntu:~$ sudo dpkg -l | grep systemd
[sudo] password for gaurav:
ii dbus-user-session 1.12.2-1ubuntu1.2 amd64 simple interprocess messaging system (systemd --user integration)
ii libnss-systemd:amd64 237-3ubuntu10.42 amd64 nss module providing dynamic user and group name resolution
ii libpam-systemd:amd64 237-3ubuntu10.42 amd64 system and service manager - PAM module
ii libsystemd0:amd64 237-3ubuntu10.42 amd64 systemd utility library
ii libsystemd0:i386 237-3ubuntu10.42 i386 systemd utility library
ii networkd-dispatcher 1.7-0ubuntu3.3 all Dispatcher service for systemd-networkd connection status changes
ri python3-systemd 234-1build1 amd64 Python 3 bindings for systemd
ii systemd 237-3ubuntu10.42 amd64 system and service manager
ii systemd-sysv 237-3ubuntu10.42 amd64 system and service manager - SysV links
gaurav@ubuntu:~$
Если вы получили вывод, подобный этому, это означает, что systemd
в вашей системе установлен.
Если он не установлен, вы можете установить его следующим образом.
sudo apt-get update
sudo apt-get install systemd
Если он установлен, но ошибка все еще сохраняется, попробуйте переустановить его с помощью следующей команды.
sudo apt-get install --reinstall systemd
Это решит вашу проблему путем установки systemd
.
В этом руководстве мы научились исправлять ошибку «systemctl: command not found». Мы можем с уверенностью заключить, что использование команды service
вместо systemctl
— это хорошая идея, которая отлично решает проблему. Мы можем легко использовать команду service
после понимания наглядных примеров, показанных в руководстве.