Как исправить ошибку «systemctl: command not found» в Linux

Часто вы можете столкнуться с ошибкой «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 и не будет работать с предыдущими конфигурациями, такими как SysVinit или 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 после понимания наглядных примеров, показанных в руководстве.