Автозагрузка сервисов в Ubuntu
Last updated
Last updated
Я відключив в GUI запуск Apache. І він взагалі пропав зі списку. Як включити?
Перевіряємо:
Відключений. Підключаємо (--now
- запустити прямо зараз):
Сервис в операционных системах семейства Unix — это программа, что выполняется в фоновом режиме и не имеет окон или других способов связи с пользователем. В операционной системе, работают в фоновом режиме огромное количество сервисов. И запускаются они при старте системы.
Всем этим управляет система инициализации Systemd. С помощью неё можно смотреть какие сервисы сейчас запущены, смотреть их логи, настраивать автозагрузку сервисов и многое другое. В этой статье мы рассмотрим как добавлять сервисы в автозагрузку в Linux на примере Ubuntu.
В Linux ещё со времен SysVInit существует понятие уровней загрузки (runlevel). Уровень загрузки определяет набор сервисов, которые должны быть запущены. В Systemd эти уровни загрузки тоже были реализованы в виде юнитов целей (target). Вот список уровней загрузки и соответствующие им цели:
Run level 0 (poweroff.target, runlevel0.target) - выключение компьютера.
Run level 1 (rescue.target, runlevel1.target) - режим восстановления.
Run level 3 (multi-user.target, runlevel3.target) - текстовый режим.
Run level 5 (graphical.target) - загрузка графического окружения.
Run level 6 (reboot.target, runlevel6.target) - перезагрузка системы.
При добавлении сервиса в автозагрузку Systemd просто создает символическую ссылку на файл юнита в папке соответствующего уровня загрузки. А при каком уровне загрузки должен запускаться юнит указано в его конфигурации.
При старте системы, если это рабочая станция с графическим окружением Systemd запускает все сервисы для multi-user.target и затем graphical.target. Для серверов без графического окружения запускается только multi-user.target, а теперь давайте более подробно рассмотрим всё на практике.
Если вам нужно знать какие сервисы на данный момент добавлены в автозагрузку используйте команду list-unit-files с фильтром по состоянию:
systemctl list-unit-files --type=service --state=enabled
Для того чтобы проверить находится ли сервис уже в автозагрузке используйте команду is-enabled. Например:
sudo systemctl is-enabled nginx
С помощью команды status вы можете посмотреть находится ли сервис в автоазагрузке, а также проверить запущен ли он в данный момент и посмотреть последние логи:
sudo systemctl status nginx
В строчке Loaded после пути к файлу юнита указано состояние автозагрузки disabled, enabled или static. Сервисы отмеченные как static запускаются автоматически и их автозагрузка не может быть отключена.
Добавить сервис в автозагрузку можно с помощью команды enable:
sudo systemctl enable имя_сервиса
Например, для того чтобы добавить в автозагрзку веб-сервер Nginx используйте такую команду:
sudo systemctl enable nginx
Если сервис ещё не запущен, то вы можете комбинировать команду enable с опцией --now для того чтобы запустить его прямо сейчас:
sudo systemctl enable --now nginx
Большинство системных сервисов, в том числе Nginx загружаются при уровне загрузки 3 (multi-user.target). Вы можете убедится, что в папке /etc/systemd/system/multi-user.target.wants есть ссылка на этот юнит:
ls -l /etc/systemd/system/multi-user.target.wants | grep nginx
Удалить сервис из автозагрузки можно, указав опцию disable:
sudo systemctl disable имя_сервиса
Кроме системных сервисов, Systemd поддерживает сервисы, запускаемые от имени обычных пользователей. Такие сервисы не требуют прав суперпользователя для управления ими. Для управления такими сервисами нужно использовать опцию --user.
Обычно такие сервисы запускаются при старте первой сессии пользователя и завершаются при завершении его последней сессии. Для того чтобы посмотреть какие сервисы текущего пользователя добавлены в автозагрузку используйте такую команду:
systemctl list-unit-files --user --type=service --state=enabled
Для добавления сервиса в автозагрузку используйте команду enable с опцией --user. Например для добавления pipewire в автозагрузку выполните:
systemctl enable --user pipewire
Аналогично всё будет работать для отключения автозагрузки:
systemctl disable --user pipewire
Если вы хотите чтобы для конкретного пользователя его сервисы запускались при загрузке системы, нужно выполнить такую команду:
sudo loginctl enable-linger имя_пользователя
Например если имя пользователя sergiy:
sudo loginctl enable-linger sergiy
После этого вы можете убедится в том, что это работает авторизовавшись от имени другого пользователя и посмотрев состояние сервиса. Например, для Pipewire:
sudo systemctl --user --machine=sergiy@ status pipewire --no-pager
Как было сказано ранее, сервисы, это обычные программы, которые выполняются в фоне и не связанны со стандартными потоками ввода и вывода. В Systemd настройки каждого сервиса находятся в отдельном файле, который хранится в файловой системе. Более подробно обо всём этом можно прочитать в статье, а в этой статье сосредоточимся только на автозагрузке.