Linux: Использование systemctl для управления службами Systemd

В операционных системах Linux, начиная с дистрибутивов, использующих систему инициализации Systemd, управление службами и процессами осуществляется через утилиту systemctl. Это мощный инструмент для администрирования, который предоставляет возможность управлять системными службами, настраивать их поведение, а также проверять их статус. В данной статье мы подробно рассмотрим, что такое systemctl, как с помощью этой утилиты управлять службами, и какие возможности она предоставляет для администрирования системы.

Ознакомиться с тарифами VPS хостинга можно тут

Что такое systemctl?

systemctl — это команда, используемая для управления systemd — системой инициализации и менеджером сервисов в Linux. Systemd заменяет старые системы инициализации, такие как SysVinit или Upstart, и стал стандартом для большинства современных дистрибутивов Linux, таких как Ubuntu, CentOS, Debian, Fedora и многих других.

Основные функции systemctl:

  • Запуск и остановка служб.
  • Проверка статуса и информации о службах.
  • Управление запуском служб при старте системы.
  • Перезагрузка конфигурации служб.
  • Включение/выключение автозапуска для служб.

Примечание:

Для работы с systemctl требуются права суперпользователя (root). Для выполнения команд с правами суперпользователя необходимо использовать sudo.

Основные команды systemctl

Проверка статуса службы

Одна из самых распространенных операций, которую выполняют администраторы — это проверка состояния служб. Для этого используется команда systemctl status:

sudo systemctl status <имя_сервиса>

Пример:

sudo systemctl status apache2

Вывод команды отобразит текущее состояние службы, её активность, последние логи и другие детали.

Пример вывода:

● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2024-11-17 13:42:11 UTC; 1h 10min ago
     Docs: https://httpd.apache.org/docs/2.4/
 Main PID: 15412 (apache2)
    Tasks: 55 (limit: 4915)
   Memory: 22.4M
   CGroup: /system.slice/apache2.service
           ├─15412 /usr/sbin/apache2 -k start
           └─15413 /usr/sbin/apache2 -k start

Запуск и остановка службы

Чтобы запустить службу, используйте команду systemctl start:

sudo systemctl start <имя_сервиса>

Пример:

sudo systemctl start apache2

Чтобы остановить службу, используйте команду systemctl stop:

sudo systemctl stop <имя_сервиса>

Пример:

sudo systemctl stop apache2

Перезапуск службы

Если вы изменили конфигурацию службы и хотите применить изменения без перезагрузки всей системы, используйте команду systemctl restart:

sudo systemctl restart <имя_сервиса>

Пример:

sudo systemctl restart apache2touch newfile.txt

Включение и отключение автозапуска службы

Чтобы настроить службу на автозапуск при старте системы, используйте команду systemctl enable:

sudo systemctl enable <имя_сервиса>

Пример:

sudo systemctl enable apache2

Если вы хотите отключить автозапуск службы при старте системы, используйте команду systemctl disable:

sudo systemctl disable <имя_сервиса>

Пример:

sudo systemctl disable apache2

Перезагрузка конфигурации systemd

После изменения конфигурации или добавления новых юнитов (служб) в систему необходимо перезагрузить systemd, чтобы он подхватил эти изменения. Для этого используется команда systemctl daemon-reload:

sudo systemctl daemon-reload

Это полезно, например, после добавления или удаления служб из каталога /etc/systemd/system.

Управление состоянием службы

Если вы хотите временно приостановить службу, используйте команду systemctl stop. Однако, если вы хотите «маскировать» службу, т.е. заблокировать её запуск, используйте команду systemctl mask:

sudo systemctl mask <имя_сервиса>

Пример:

sudo systemctl mask apache2

Это предотвратит запуск службы, даже если другой процесс попытается её запустить.

Чтобы снять маску, используйте команду systemctl unmask:

sudo systemctl unmask <имя_сервиса>

Пример:

sudo systemctl unmask apache2

Работа с юнитами systemd

Юнит в контексте systemd — это любой объект, который может быть управляем через systemctl. Юниты могут быть различных типов, включая службы, монтажные точки, сокеты, таймеры и другие. Каждый юнит имеет файл конфигурации, обычно с расширением .service для служб.

Просмотр всех юнитов

Чтобы получить список всех активных юнитов, используйте команду:

sudo systemctl list-units

Если нужно получить информацию обо всех доступных юнитах, включая неактивные, используйте команду:

sudo systemctl list-units --all

Просмотр всех файлов юнитов

Чтобы просмотреть список всех файлов юнитов, которые systemd использует для управления сервисами, используйте команду:

sudo systemctl list-unit-filestouch newfile.txt

Этот вывод покажет информацию о статусе всех юнитов, таких как enabled, disabled, static и т. д.

Работа с пользовательскими службами

Кроме системных юнитов, systemd позволяет создавать и управлять пользовательскими службами, которые работают только в контексте пользователя, а не всей системы.

Для создания или редактирования пользовательской службы, используйте команду systemctl --user. Пример:

systemctl --user start my_service.service

Пользовательские службы обычно располагаются в директории ~/.config/systemd/user/.

Редактирование юнитов

Если вы хотите изменить параметры службы, можно использовать команду systemctl edit, которая позволяет редактировать конфигурацию юнита:

sudo systemctl edit <имя_сервиса>

Это откроет редактор для модификации конфигурации юнита. Изменения можно сохранять и сразу применять к службе.

Удаление юнитов

Если вам нужно удалить службу из системы, используйте команду systemctl disable для отключения автозапуска, а затем удалите её файлы вручную из директории /etc/systemd/system/.

Рабочая директория службы

Каждая служба в systemd может иметь свою рабочую директорию, где она будет искать файлы конфигурации или хранить логи. Чтобы изменить рабочую директорию для службы, нужно изменить её параметры в соответствующем юнит-файле, используя директиву WorkingDirectory:

[Service]
WorkingDirectory=/path/to/directory

Примечание:

После изменения юнит-файла необходимо выполнить команду systemctl daemon-reload для перезагрузки конфигурации.

Пример работы с systemctl

Допустим, вам нужно перезапустить службу Nginx, включить её автозапуск и проверить её статус.

  1. Перезапуск службы:

    sudo systemctl restart nginx

  1. Включение автозапуска при старте системы:

    sudo systemctl enable nginx

  1. Проверка статуса:

    sudo systemctl status nginx

Заключение

Утилита systemctl является неотъемлемой частью администрирования Linux-систем, использующих systemd. Она предоставляет мощные инструменты для управления службами, их настройкой и мониторингом. Важно помнить, что любые изменения в конфигурации служб требуют перезагрузки systemd с помощью команды daemon-reload, а также необходимости учитывать права суперпользователя для выполнения большинства операций.

  • 0 Пользователи нашли это полезным

Помог ли вам данный ответ?

Ищете что-то другое?

mhost.by