Ubuntu: Как добавить сервис в автозагрузку и ускорить работу системы

Ubuntu: Как добавить сервис в автозагрузку и ускорить работу системы

Ваш сервер или рабочий стол с Ubuntu может работать гораздо эффективнее, если вы возьмете под контроль процессы, запускающиеся при старте системы. Представьте: вы устанавливаете нужную программу, а она не запускается сама, или наоборот — система загружается медленно из-за кучи ненужных фоновых служб.

Всеми этими процессами в современных дистрибутивах управляет мощная система инициализации — Systemd. Именно она решает, что и когда запускать. Вы узнаете, как легко посмотреть полный список всех служб, которые уже настроены на автозапуск, и как быстро проверить статус любого из них, например, популярного веб-сервера Nginx.

Мы не будем грузить вас теорией, а сразу перейдем к практике. Вы научитесь одной простой командой добавлять любой сервис в автозагрузку, чтобы он стартовал автоматически при каждой загрузке ОС. И, конечно, такой же легкой командой убирать его оттуда, если он больше не нужен.

Но это еще не все! Отдельно мы разберем настройку автозапуска для программ обычного пользователя, без прав суперпользователя. Это откроет вам возможность гибко настраивать сессии и управлять персональными приложениями. Готовы сделать вашу систему более отзывчивой и управляемой? Все ответы ждут вас в полной статье.


Сервис в операционных системах семейства Unix — это программа, что выполняется в фоновом режиме и не имеет окон или других способов связи с пользователем. В операционной системе, работают в фоновом режиме огромное количество сервисов. И запускаются они при старте системы.

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


Содержание статьи

Управление автозагрузкой сервисов в Linux

Как было сказано ранее, сервисы, это обычные программы, которые выполняются в фоне и не связанны со стандартными потоками ввода и вывода. В Systemd настройки каждого сервиса находятся в отдельном файле, который хранится в файловой системе. Более подробно обо всём этом можно прочитать в статьеУправление службами в Linux, а в этой статье сосредоточимся только на автозагрузке.

В 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, а теперь давайте более подробно рассмотрим всё на практике.

1. Список сервисов добавленных в автозагрузку

Если вам нужно знать какие сервисы на данный момент добавлены в автозагрузку используйте команду list-unit-files с фильтром по состоянию:

systemctl list-unit-files --type=service --state=enabled
Ubuntu: Как добавить сервис в автозагрузку и ускорить работу системы

2. Проверка состояния

Для того чтобы проверить находится ли сервис уже в автозагрузке используйте команду is-enabled. Например:

sudo systemctl is-enabled nginx
Ubuntu: Как добавить сервис в автозагрузку и ускорить работу системы

С помощью команды status вы можете посмотреть находится ли сервис в автоазагрузке, а также проверить запущен ли он в данный момент и посмотреть последние логи:

sudo systemctl status nginx
Ubuntu: Как добавить сервис в автозагрузку и ускорить работу системы

В строчке Loaded после пути к файлу юнита указано состояние автозагрузки disabled, enabled или static. Сервисы отмеченные как static запускаются автоматически и их автозагрузка не может быть отключена.

3. Добавление в автозагрузку

Добавить сервис в автозагрузку можно с помощью команды 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

4. Удаление из автозагрузки

Удалить сервис из автозагрузки можно, указав опцию disable:

sudo systemctl disable имя_сервиса
Ubuntu: Как добавить сервис в автозагрузку и ускорить работу системы

Автозагрузка сервисов пользователя Linux

Кроме системных сервисов, Systemd поддерживает сервисы, запускаемые от имени обычных пользователей. Такие сервисы не требуют прав суперпользователя для управления ими. Для управления такими сервисами нужно использовать опцию --user.

Обычно такие сервисы запускаются при старте первой сессии пользователя и завершаются при завершении его последней сессии. Для того чтобы посмотреть какие сервисы текущего пользователя добавлены в автозагрузку используйте такую команду:

systemctl list-unit-files --user --type=service --state=enabled
Ubuntu: Как добавить сервис в автозагрузку и ускорить работу системы

Для добавления сервиса в автозагрузку используйте команду 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
Ubuntu: Как добавить сервис в автозагрузку и ускорить работу системы

Выводы

В этой статье мы рассмотрели как управлять автозагрузкой сервисов в Linux. Более подробно про автозагрузку в целом читайте в статье автозагрузка в Linux. В ней рассматривается не только автозагрузка сервисов, но и другие способы автозагрузки программ.

Оставить комментарий


Кликните на изображение чтобы обновить код, если он неразборчив