В операционных системах 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, включить её автозапуск и проверить её статус.
- Перезапуск службы:
sudo systemctl restart nginx
- Включение автозапуска при старте системы:
sudo systemctl enable nginx
- Проверка статуса:
sudo systemctl status nginx
Заключение
Утилита systemctl
является неотъемлемой частью администрирования Linux-систем, использующих systemd. Она предоставляет мощные инструменты для управления службами, их настройкой и мониторингом. Важно помнить, что любые изменения в конфигурации служб требуют перезагрузки systemd с помощью команды daemon-reload
, а также необходимости учитывать права суперпользователя для выполнения большинства операций.