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

(Опис системи та деяких можливих дій для лінуксоїда-початківця.)

При запуску комп'ютера ядро ​​перевіряє процесор і пам'ять, виявляє та частково налаштовує інші пристрої, монтує кореневу файлову систему, запускає систему ініціалізації.

"Система ініціалізації" в UNIX та Linux - набір програм для управління формуванням робочого середовища: текстове/графічне робоче оточення або службовий вузол обчислювальної мережі. Традиційне ім'я основної програми – init ("інІт"). Її P >

Для 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, можлива мережа);

У різних інсталяціях рівні запуску можуть бути інакше налаштовані. У домашній системі зазвичай автоматично встановлено рівень або ціль, що відповідає традиційному 5. У Upstart рівень 2 відповідає традиційному 5; додатково є позначення N - "попередній невідомий" та S - 1 (від single user). У systemd є цілі shutdown (приблизно відповідає рівню 0); basic (1); multi-user (3); графіка (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

Переглянути список працюючих демонів:

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

Перевірити, чи відзначений демон як включений:

initctl show-config daemonі див. нижче, як вимкнути демона

systemctl is-enabled daemon.service

Вимкнути демона (ніколи не запускається):

chkconfig daemon off

прибрати розширення ".conf" відповідного файлуабо коректно виправити вміст

systemctl disable daemon.service

Дізнатися поточний рівень запуску або ціль:

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"

Вибирати демонів для відключення слід дуже обережно. Помилка може призвести до непрацездатності всього робочого середовища (це виявиться відразу або при наступному увімкненні комп'ютера). Щодо нешкідливого - спробувати для тренування відключити сервіс друку 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) та його завершення.