Управляем автозагрузкой в Linux¶
Systemd - управление автозагрузкой служб в Linux¶
В большистве популярных современных популярных дистрибутивов Linux (CentOS, RHEL, Debian, Fedora и Ubuntu) в качестве демона автозагрузки вместо init.dиспользуетсяsystemd.
Systemd – менеджер системы и служб Linux, используется для запуска других демонов и управления ими в процессе работы, использует unit-файлы из /etc/systemd/system (init.d использовал скрипты из каталога /etc/init.d/). Systemd позволяет распараллелить запуск служб в процессе загрузки ОС, тем самым ускоряя запуск.
Для управления system используется команда systemctl.
Для начала, после загрузки системы, мы проверим список юнитов, которые в данный момент добавлены в systemd:
Список unit-файлов можно получить командой:

Данная команда отобразит все доступные юнит-файлы (не зависимо от того, были они загружены в systemd после загрузки ОС или нет).
Чтобы вывести список активных сервисов и их состояние, выполните:

Следующая команда выведет список юнитов, которые загрузил или пытался загрузить systemd. Так как после запуска некоторые юниты могут стать неактивными, с помощью флага - all вы получите полный список.

Добавление сервиса в systemd¶
Для управления сервисами в systemd используется особый синтаксис. После имени серверсв в конце нужно указывать .service. Например:
команда добавит в автозагрузку веб-сервер nginx
Данная команда создаст символическую ссылку на копию файла, указанного в команде сервиса, в директории автозапуска systemd.
Вывод этой команды показывает в какой директории был создан симлинк на файл сервиса.
Чтобы посмотреть добавлен тот или иной сервис в автозагрузку, можно проверить его статус:
При выводе нужно обратить внимание на строку:
Значение enabled означает что данный сервис загружается автоматически (добавлен в автозагрузку). Если сервис не загружается автоматом, здесь буде указано disabled.
Удаление сервиса из systemd¶
Вы можете удалить сервис из автозагрузки, чтобы он не запускался после старта Linux (при этом сам сервис с сервера не удаляется). Чтобы удалить сервис из автозагрузки, выполните команду (* - нужный сервис):
Например, чтобы удалить из автозагрузки nginx, выполните:
После выполнения команды, симлинк на файл сервиса будет удален из директории systemd. Можно проверить, есть ли юнит в автозагрузке:
Systemd - маскировка юнитов¶
Иногда встречаются ненужные сервисы, которые после удаления их из автозагрузки, все равно там оставались и запускаются после перезагрузки. Чтобы решить этот вопрос, можно замаскировать сервис:
И после этого он вообще не будет запускаться:
Снять маску можно командой:
Если после маскировки сервиса, вы проверите юнит-файлы, то увидите, что сервис помечен как замаскированный (состояние masked).
Таким нехитрым способом, можно избавить себя от удаления сервиса, даже если он не удаляется из автозагрузки systemd.
Собственный демон и добавление его в systemd¶
Можно создать собственный демон, которым будем управлять через systemd.
Например, нам нужно запускать все тот же скрипт /root/script.sh после перезагрузки системы. Начнем с создания файла нашей будущей службы:
touch /etc/systemd/system/script.service
chmod 664 /etc/systemd/system/script.service
nano /etc/systemd/system/script.service
Содержимое файла будет следующее:
[Unit]
Description=Template SettingsService
After=network.target
[Service]
Type=oneshot
User=root
ExecStart=/root/script.sh
[Install]
WantedBy=multi-user.target
Основные параметры:
User - пользователь под которым будет запускаться демон
Type=oneshot - процесс будет завершен до запуска дальнейших юнитов
Проверяем и перезапускаем:
Output
● script.service - Test
Loaded: loaded (/etc/systemd/system/script.service; disabled; vendor preset: disabled)
Active: active (running)
Если все хорошо, добавляем его в автозагрузку:
Created symlink from /etc/systemd/system/multi-user.target.wants/script.service to /etc/systemd/system/script.service
Таким образом, мы можем добавить любой скрипт в автозагрузку через systemd.


