- Автозагрузка сервисов в Ubuntu
- Управление автозагрузкой сервисов в Linux
- 1. Список сервисов добавленных автозагрузку
- 2. Проверка состояния
- 3. Добавление в автозагрузку
- 4. Удаление из автозагрузки
- Автозагрузка сервисов пользователя Linux
- Выводы
- Учимся управлять автозагрузкой в linux
- Что такое inittab
- Что такое systemd
- Автозагрузка проложений
Автозагрузка сервисов в Ubuntu
Сервис в операционных системах семейства 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
2. Проверка состояния
Для того чтобы проверить находится ли сервис уже в автозагрузке используйте команду is-enabled. Например:
sudo systemctl is-enabled nginx
С помощью команды status вы можете посмотреть находится ли сервис в автоазагрузке, а также проверить запущен ли он в данный момент и посмотреть последние логи:
sudo systemctl status nginx
В строчке 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 имя_сервиса
Автозагрузка сервисов пользователя Linux
Кроме системных сервисов, 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
Выводы
В этой статье мы рассмотрели как управлять автозагрузкой сервисов в Linux. Более подробно про автозагрузку в целом читайте в статье автозагрузка в Linux. В ней рассматривается не только автозагрузка сервисов, но и другие способы автозагрузки программ.
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
Учимся управлять автозагрузкой в linux
Написанием данной статьи меня побудила банальная задача: отключить графическую оболочку при старте системы. Казалось бы, поменять одну цифру в /etc/inittab. Но как выяснилось, все намного сложнее. Итак, разберем по полочкам, что такое inittab и systemd, для чего они нужны и как управлять автозагрузкой приложений в linux. Как человек, который самостоятельно пытается найти ответы, пришлось прочитать не одну статью, информации на эту тему много, но понимание приходит не сразу. На русскоязычных форумах как правило развернутого ответа нет. Скажу сразу, я не системный администратор и статья больше рассчитана на людей, кто относительно недавно познакомился с linux. Кому интересна данная тема, добро пожаловать.
Это моя первая статья, если есть замечания прошу в комментарии.
Что такое inittab
По сути inittab представляет из себя файл в котором можно посмотреть/поменять уровень загрузки операционной системы в /etc/inittab. Давайте разберем его
# The default runlevel. id:5:initdefault: # Runlevel 0 is halt. # Runlevel 1 is single-user. # Runlevels 2-5 are multi-user. # Runlevel 6 is reboot. l0:0:wait:/etc/init.d/rc 0 l1:1:wait:/etc/init.d/rc 1 l2:2:wait:/etc/init.d/rc 2 l3:3:wait:/etc/init.d/rc 3 l4:4:wait:/etc/init.d/rc 4 l5:5:wait:/etc/init.d/rc 5 l6:6:wait:/etc/init.d/rc 6
В linux существуют 7 уровней загрузки операционной системы. В нашем случае нулевой уровень — это режим восстановления, первый — это запуск в одиночном режиме под root. 2-5 загрузка в мульти пользовательском режиме (т.е. обычный режим). Отличаются они лишь набором стартовых скриптов. 6 уровень это перезагрузка. Скрипты берутся из директорий, которые расписаны в inittab. Наша система по умолчанию загружается на 5 уровне, посмотрим что-же находится в директории /etc/init.d/rc 5:
Скрипты в этом каталоге выполняются каждый раз при старте системы. А если быть точнее это лишь символьные ссылки на сами скрипты. Первая буква означает S(start) K(kill или stop) для изменения порядка скриптов меняется цифра, т.е. запуск скриптов выполняется по возрастанию. Руками менять можно, но рекомендуется менять через «update-rc.d»
usage: update-rc.d [-n] [-f] basename remove update-rc.d [-n] basename disable|enable [S|2|3|4|5] -n: not really -f: force
Что такое systemd
Systemd является заменой старой традиционной загрузки inittab. Был разработан чтобы обеспечить лучшую обработку зависимостей. В настоящее время systemd поставляется по умолчанию с популярными дистрибутивами linux таких как Fedora, Mandira, Arch Linux, CentOS 7, Red Hat 7.0 и на удивление для меня в Debian 8.9.
Плюсы и минусы в явном виде для меня не понятны. Интересен в первую очередь функционал. Итак разбираемся дальше. Две вещи, которые нам нужно знать:
Чтобы посмотреть уровень загрузки, введем команду:
root@asterisk:/home/rus# systemctl get-default graphical.target root@asterisk:/home/rus# runlevel N 5
Как правило graphical.target аналог 5 уровня, запуск системы в графическом режиме.
Чтобы посмотреть все доступные нам уровни, введем:
проведем аналогию c inittab
Runlevel Описание Systemd 0 poweroff.target 1 rescue.target 2 multi-user.target 3 multi-user.target 4 multi-user.target 5 graphical.target 6 reboot.target
При старте системы linux смотрит в файл (который является ссылкой)
root@asterisk:/home/rus# ls -la /etc/systemd/system/default.target lrwxrwxrwx 1 root root 37 ноя 27 14:45 /etc/systemd/system/default.target -> /lib/systemd/system/graphical.target
Таким образом чтобы загрузиться в многопользовательском режиме, нам нужно сменить ссылку или использовать systemctl (делает тоже самое)
Автозагрузка проложений
Как мы уже поняли в каталогах /etc/rc3.d/* лежат символьные ссылки на скрипты. Где цифры от 1 это уровень загрузки у inittab или systemd. Мы можем менять руками порядок запуска, убирать и добавлять. По сути systemd пробежится по всем файлам и попытается их инициализировать при старте системы. Теперь разберем управление через команды:
chkconfig — нужна для просмотра сервисов(программ). Поддерживает режим изменения для любого уровня загрузки.
update-rc.d — служит для запуска/остановки скриптов, при старте/выключении системы. Собственно через нее мы и будем менять автозапуск графической оболочки KDE(kdm). Так уж получилось, что у меня запуск окружения KDE включен для 2-5 уровней по умолчанию.
При старте системы я отключаю 2-4 уровень загрузки и проверяю что у меня стоит 3-й уровень загрузки
Перезагружаюсь и вижу приглашение консоли tty. profit
На самом деле, это чуть больше чем консоль. Мы можем переключаться между вкладками.
CTRL+ALT+(F1-F6)
команда startx запустит графику KDE.
Вывод: Тут должен быть вывод, но вместо него я вставлю кота
Список используемой литературы: