mirror of
https://github.com/Yaslonane/lpic_1-101.git
synced 2026-05-19 17:48:32 +03:00
136 lines
63 KiB
Markdown
136 lines
63 KiB
Markdown
**101.3** Инициализация системы
|
||
|
||
Студент должен уметь управлять уровнями выполнения SysV (runlevels) или целями загрузки systemd (boottarget) **.** Также в теме рассматриваются переключение в однопользовательский режим, выключение и перезагрузка системы, предупреждение пользователей, настройки уровня запуска ОС по умолчанию. Также нужно быть знакомыми с инициализацией в стиле upstart.
|
||
|
||
**Изучаем** :
|
||
|
||
- установка варианта загрузки по умолчанию;
|
||
- переключение между режимами работы;
|
||
- включение и выключение ПК;
|
||
- уведомление пользователей системы;
|
||
- корректное завершение процессов.
|
||
|
||
**Термины и утилиты:**** **
|
||
|
||
- /etc/inittab
|
||
- shutdown
|
||
- init
|
||
- /etc/init.d/
|
||
- telinit
|
||
- systemd
|
||
- systemctl
|
||
- /etc/systemd/
|
||
- /usr/lib/systemd/
|
||
- upstart
|
||
- inictl
|
||
- wall
|
||
|
||
Инициализация системы это процесс запуска скриптов, подготавливающих ОС к работе. Существует несколько различных стилей инициализации системы, использующиеся в разных семействах и даже в разных релизах ОС.
|
||
|
||
Классическим методом инициализации ОС является инициализация в стиле **SysV** (в современных OCLinux практически не используется). Ключевым демоном является **init** (/sbin/init), являющийся родительским процессом, запускающим все остальные. Посмотреть дерево процессов и увидеть родительский можно командой pstree (для в centos нужно установить пакет psmisc)
|
||
|
||
Инициализация в стиле **SysV** оперирует с понятием уровня выполнения ( **runlevel** ), представляющего собой следующие режимы загрузки ОС:
|
||
|
||
**0** _– выключение;_
|
||
|
||
**1** _– однопользовательский режим;_
|
||
|
||
**2** _–_ _Debian __/__ Ubuntu_ _по умолчанию ( __GUI_ _или_ _CUI__ );_
|
||
|
||
**3** _–_ _RedHat __/__ Suse_ _по умолчанию (режим_ _CUI__);_
|
||
|
||
**4** _– WildCard (программируемый режим);_
|
||
|
||
**5** _–_ _RedHat __/__ Suse_ _по умолчанию (режим_ _GUI__);_
|
||
|
||
**6** _– перезагрузка._
|
||
|
||
Настройки загрузки по умолчанию указываются в файле **/**** etc ****/**** inittab**(конфигурационный файл инициализации системы), например:
|
||
|
||
**id**** :3: ****initdefault**** : ** _(уровень загрузки по умолчанию - третий);_
|
||
|
||
Все скрипты, использующиеся для запуска служб, располагаются в директории **/**** etc ****/**** init ****.**** d**, например:
|
||
|
||
**/**** etc ****/**** init ****.**** d ****/**** network ****restart** _ (перезапустить службу сети);_
|
||
|
||
В каталоге **/**** etc **находятся директории** rc ****0.**** d ****,** **rc**** 1. ****d** (и т.д.), содержащие в себе наборы скриптов (точнее ссылки на скрипты), использующиеся при переключении в разные режимы работы, например в **rc**** 3. ****d** находятся скрипты выполняющиеся на **runlevel**** 3**.
|
||
|
||
Некоторые скрипты (имя начинается с "S") запускают демоны, а некоторые (имя начинается с "K") – останавливают.
|
||
|
||
Для работы с уровнями выполнения используют следующие команды:
|
||
|
||
- **init** или **telinit** - переключение в режима запуска;
|
||
- **runlevel** - узнать текущий режим работы;
|
||
- **halt** - выключить ОС;
|
||
- **reboot** - перезагрузить ПК;
|
||
- **shutdown** - завершить работу ПК.
|
||
|
||
Для управления демонами используется команда **service**** имя\_демона** с ключами (не у всех демонов в конфиге могут присутствовать все перечисленные команды, зачастую можно увидеть ленивый скрипт только с командами start и stop):
|
||
|
||
- **start** - запустить;
|
||
- **status ** - показать состояние;
|
||
- **stop** - остановить;
|
||
- **restart** - перезапустить;
|
||
- **reload** - перезагрузить конфигурационный файл службы.
|
||
|
||
\_\_\_
|
||
|
||
Более современный стилем инициализации является **systemd**. Сейчас он используется на большинстве современных дистрибутивов Linux (Centos 7.0 и выше, Ubuntu 15.10 и выше), засчет ускорения загрузки (распараллеливание запуска демонов) и автоматической отказоустойчивости (отслеживание состояния демонов). Использует понятие модулей (units), которыми могу быть службы (._service_), точки монтирования (._mount_), устройства (._device_) или сокеты (._socket_).
|
||
|
||
Модули (юниты) создаваемые автоматически после установки пакетов ПО располагаются в директории **/usr/lib/systemd/.** Также можно располагать юниты в директориях **/etc/systemd/system/** (для ОС в целом) или **/etc/systemd/user/** (для пользователей).
|
||
|
||
Для управления юнитами используется утилита **systemctl** , например:
|
||
|
||
**systemctl list-units ** _(показать запущенные юниты);_
|
||
|
||
**systemctl start network.service ** _( __запустить__ демон __сети__ );_
|
||
|
||
**systemctl status crond ** _(показать статус демона планировщика)._
|
||
|
||
Вместо **runlevel** в **systemd** используется понятие **target** (цели), только в отличии от уровней выполнения они не пронумерованы, некоторые из них могут быть запущены одновременно. Target обратно совместимы с инициализацией sysV, поэтому можно использовать команду **telinit** для переключения в другой режим выполнения.
|
||
|
||

|
||
|
||
_Рисунок 1. Таргеты инициализации_
|
||
|
||
Для управления режимами работы также используется утилита **systemctl** , например:
|
||
|
||
**systemctl isolate reboot.target** _( __выполнить__ таргет_ _reboot);_
|
||
|
||
**systemctl set-default -f multi-user.target** _( __установить__ таргет_ _multi-user_ _в __качестве__ режима __загрузки__ по __умолчанию__ );_
|
||
|
||
Для управления питаем также можно использовать **systemctl** , например:
|
||
|
||
**systemctl reboot ** _ (перезагрузить ПК);_
|
||
|
||
**systemctl**** poweroff**_ (выключить ПК)._
|
||
|
||
Важная особенность systemd – гибкая система журналирования **journald** , собирающая информацию из различных источников и привязывающая ее к различным юнитам. Примеры ее использования:
|
||
|
||
**journalctl –f** _ (просмотр сообщений в режиме реального времени);_
|
||
|
||
**journalctl -n10** _ (просмотр 10 последних сообщений);_
|
||
|
||
**journalctl \_UID=70** _ (вывод всех сообщений включающих пользователя с ID=70);_
|
||
|
||
\_\_\_
|
||
|
||
В исторической перспективе отмечаем систему инициализации системы является **upstart** , опирающуюся в своей работе на события, происходящие в ОС. Она использовалась в ubuntu с версии 6.10 по 15.04, и во многих других дистрибутивах, которые сейчас уже используют systemd.
|
||
|
||
Upstart оперирует понятиями **служба** (_service_), поддерживаемая в постоянном режиме работы, и **задача** (_task_), выполняющаяся разово. В процессе инициализации upstart считывает настройки из файлов конфигурации (_заданий -_ _jobs_) в каталоге **/**** etc ****/**** init ****/.**
|
||
|
||
Каждое задание представляет собой сценарии запуска демонов с различными критериями и условиями выполнения.
|
||
|
||
Уровни инициализации или режимы работы используется такие же, как и в классическом sysV, так что команды **runlevel** и **telinit** продолжают работать. Синтаксис управления питанием и службами также схож с классическим.
|
||
|
||
Уровень инициализации по умолчанию указывается в файле **/etc/init/rc-sysinit.conf**
|
||
|
||
Для управления инициализацией в стиле upstart используется утилита **initctl** , например:
|
||
|
||
**initctl**** start ****networking** _ (запустить службу сети);_
|
||
|
||
**initctl**** list**_ __ (вывести перечень служб);_
|
||
|
||
-----
|
||
|
||
Для возможности извещения в любых дистрибутивах Linux всех пользователей, работающих в системе, о каких-либо действиях можно воспользоваться командой **wall****"текст\_сообщения"**. |