Система инициализации

(Описание системы и некоторых возможных действий для начинающего линуксоида.)


При запуске компьютера ядро проверяет процессор и память, обнаруживает и отчасти настраивает прочие устройства, монтирует корневую файловую систему, запускает систему инициализации.


"Система инициализАции" в UNIX и Linux - набор программ для управления формированием рабочей среды: текстовое/графическое рабочее окружение или служебный узел вычислительной сети. Традиционное имя основной программы - init ("инИт"). Её PID = 1.


Для Linux есть три основных системы инициализации (по старшинству): System V Init, Upstart, systemd - и ёще несколько менее распространённых.


Система System V Init (сокращённо Sysvinit) унаследована от UNIX пятой (V) версии. Система Upstart создана для Ubuntu Linux и была ненадолго принята также в Red Hat Enterprise Linux. Система systemd - наиболее новая, набирающая популярность, на основе идей программы launchd из операционной системы Mac OS.


Для операционной системы достаточно одной системы инициализации, но для совместимости (поддержания работоспособности старых программ) в инсталляции может быть одна основная система с элементами другой.


Рабочая среда может состоять из большого числа процессов. Систему инициализации настраивают так, чтобы запустить все необходимые процессы в нужном порядке. Предполагаемый результат называют "уровнем запуска" (runlevel) в Sysvinit и Upstart или "целью" (target) в systemd. Выключение компьютера и перезапуск операционной системы тоже считаются результатами - здесь тоже нужно соблюсти правильную последовательность действий и дать завершаемым процессам возможность сохранить свои данные.


Многие программы, формирующие рабочую среду, специально разработаны или настроены для работы в фоне, например: диспетчер электропитания acpid, диспетчер сети NetworkManager, служба точного времени ntpd, служба наблюдения за исправностью дисков smartd. В сочетании с файлами инициализации эти фоновые программы называют "дЕмонами" (daemon, "дИмон"), "службами" или "сервисами" (service, "сЁрвис"). Часто имя заканчивается на d (от daemon).


Система Sysvinit запускает и останавливает демонов в заданном пользователем/администратором порядке; Upstart - формирует "дерево" откликов на "события" (обнаружение устройства, монтирование, запуск демона - могут быть событиями, требующими реакции в виде запуска другого демона); systemd - при запуске рассчитывает "дерево" зависимостей демонов друг от друга и запускает демонов по возможности параллельно.


Кроме init в системе инициализации есть файлы настройки демонов (файлы инициализации) и управляющие программы самой системы.


Файлы инициализации - текстовые, со специальным синтаксисом (своим для каждой системы). Для Sysvinit они располагаются в каталогах /etc/rc*.d/ (вместо звёздочки - число или ничего), /etc/conf.d/ и ещё есть файл /etc/inittab; для Upstart - /etc/init/ и /etc/init.d/ и файл inittab; для systemd - /lib/systemd/, /run/systemd/ и /etc/systemd/. Какая-то часть файлов является сценариями командной оболочки. Уровень запуска или цель systemd можно воспринимать как набор файлов инициализации, и система должна их выполнить (запустив соответствующие программы). Особенно много файлов - у systemd, отчасти она сама их создаёт.


Традиционный список уровней запуска:

0 - остановка системы (завершение процессов из user space, остановка работы ядра, и, если возможно, отключение электропитания);

1 - однопользовательский режим (доступна командная строка, нет сети, обычно используется как аварийный);

2 - многопользовательский режим (доступна командная строка, нет сети);

3 - многопользовательский режим (доступна командная строка, возможна сеть);

4 - не используется;

5 - многопользовательский режим (доступны и командная строка, и GUI, возможна сеть);

6 - перезагрузка.


В разных инсталляциях уровни запуска могут быть настроены иначе. В домашней системе обычно автоматически установлен уровень или цель, соответствующий традиционному 5. В Upstart уровень 2 соответствует традиционному 5; дополнительно есть обозначения N - "предыдущий неизвестен" и S - 1 (от single user). В systemd есть цели shutdown (примерно соответствует уровню 0); basic (1); multi-user (3); graphical (5).


Обычно поставляются готовые файлы инициализации, поэтому инсталляция Linux уже предоставляет готовую рабочую среду. Нередко функциональность уровня запуска или цели оказывается немного избыточна, поэтому приходится отключать лишних демонов - просто чтобы сэкономить системные ресурсы.


Типичные действия: посмотреть список работающих демонов; запустить/остановить/перезапустить демона. Запускать демона прямой командой или останавливать его командой kill считается неправильным - есть специальные управляющие программы. Для Sysvinit это chkconfig, service и другие; для Upstart - initctl и другие; для systemd - systemctl. В инсталляциях с элементами других систем инициализации могут работать программы каждой системы. В systemd файлы инициализации имеют особые расширения (".service", ".target", ...), которые в команде указывать не обязательно; здесь они приводятся для уточнения, с чем именно команда имеет дело.


Если указаны только две команды, то первая - для Sysvinit и Upstart. Вместо имени указано слово "daemon".



Узнать, запущен ли определённый демон:


service daemon status

initctl status daemon или initctl --system status daemon

systemctl status daemon.service



Посмотреть список работающих демонов:


service --status-all

initctl list или initctl --system list

systemctl --all или systemctl list-units --all



Запустить демона:


service daemon start

start daemon или initctl start daemon

systemctl start daemon.service



Остановить демона:


service daemon stop

stop daemon или initctl stop daemon

systemctl stop daemon.service



Перезапустить демона:


service daemon restart или service daemon condrestart

restart daemon или initctl restart daemon

systemctl restart daemon.service или systemctl condrestart daemon.service



Или, если возможно, заставить демона перечитать свои настройки (это быстрее, чем полный перезапуск):


service daemon reload

reload daemon или initctl reload daemon

systemctl reload daemon.service



Если файл настройки демона - сценарий оболочки, то можно запустить в командной строке сам сценарий с аргументом start, stop или иным (изучите содержимое сценария и попробуйте догадаться).



Включить демона (автозапуск):


chkconfig daemon on

вернуть исправления (см. ниже, как отключить демона)

systemctl enable daemon.service



Проверить, отмечен ли демон как включённый:


chkconfig daemon

initctl show-config daemon и см. ниже, как отключить демона

systemctl is-enabled daemon.service



Отключить демона (никогда не запускается):


chkconfig daemon off

убрать расширение ".conf" соответствующего файла или корректно исправить содержимое

systemctl disable daemon.service



Узнать текущий уровень запуска или цель:


runlevel или who -r

systemctl list-units *target



Установить уровень запуска/цель по умолчанию:


во фрагменте id:5:initdefault файла /etc/inittab установить нужный номер

во фрагменте env DEFAULT_RUNLEVEL=2 файла /etc/init/rc-sysinit.conf установить нужный номер

systemctl set-default graphical.target или

ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target



Перейти сейчас на другой уровень запуска/цель:


init 3 или telinit 1

systemctl isolate multi-user.target



В том числе выключить компьютер:


halt, или poweroff, или "shutdown -h now"

systemctl halt или systemctl poweroff



Или перезапустить операционную систему:


reboot или "shutdown -r now"

systemctl reboot



Выбирать демонов для отключения следует очень осторожно. Ошибка может привести к неработоспособности всей рабочей среды (это обнаружится сразу или при следующем включении компьютера). Относительно безвредно - попробовать для тренировки отключить сервис печати cups, сервис сканирования saned, службу точного времени ntpd.


Программы для GUI: Services Configuration Tool (system-config-services) для Sysvinit, Boot-Up manager (bum) для Sysvinit и Upstart, systemadm для systemd. Псевдографическая ntsysv для Sysvinit.


Процесс init является корневым предком всех процессов, кроме ядерных потоков. Поэтому в задачи init дополнительно входит "усыновление" процессов-сирот (orphan process) и их завершение.

GNU/Linux

1K поста15.5K подписчиков

Добавить пост

Правила сообщества

Все дистрибутивы хороши.

Будьте людьми.