2. Рівні запуску

Усі файли, пов'язані з запуском системи, перебувають у каталозі /etc/rc.d. Ось список його файлів:

$ ls /etc/rc.d
init.d/  rc0.d/  rc2.d/  rc4.d/  rc6.d/            rc.local*    rc.sysinit*
rc*      rc1.d/  rc3.d/  rc5.d/  rc.alsa_default*  rc.modules*

Як вже було відзначено, rc.sysinit - це перший файл, який запускається системою. Він відповідає за встановлення базової конфігурації машини: тип клавіатури, налаштування певних пристроїв, перевірка файловій системи тощо.

Потім запускається скрипт rc з потрібним номером рівня запуску у якості аргументу. Як ми вже бачили, рівень запуску - це просто ціле число, а для всіх певних рівнів запуску <x> має відповідний каталог rc<x>.d. У стандартній інсталяції Mandriva Linux ви могли б побачити, що існує шість рівнів виконання:

Давайте подивимося на вміст каталогу rc3.d:

$ ls /etc/rc.d/rc3.d/
K09dm@         S12syslog@   S24messagebus@     S40atd@         S91dictd-server@
S01udev@       S13partmon@  S25haldaemon@      S55sshd@        S92lisa@
S03iptables@   S15cups@     S25netfs@          S56ntpd@        S95kheader@
S05harddrake@  S17alsa@     S29numlock@        S56rawdevices@  S99local@
S10network@    S18sound@    S33nifd@           S75keytable@
S11shorewall@  S20xfs@      S34mDNSResponder@  S90crond@
$

Як бачите, всі файли в цьому каталозі є символічними посиланнями, і всі вони мають дуже специфічний вид. Їх загальний вид такий:

<S|K><порядок><ім'я_служби>

S означає запуск (Start) служби, а K означає зупинку (Kill) служби. Скрипти запускаються у порядку зростання номерів, а якщо два скрипти мають однаковий номер, тоді застосовується прямий алфавітний порядок. Ми також можемо бачити, що всі символічні посилання вказують на певні скрипти, які знаходяться у каталозі /etc/rc.d/init.d (за винятком скрипта local, що відповідає за керування особливою службою.)

Коли система переходить на заданий рівень виконання, вона починає з того, що запускає по порядку посилання K: команда rc шукає, куди вказує посилання, потім викликає відповідний скрипт з єдиним аргументом stop. Потім вона запускає скрипти S, використовуючи такий метод, за винятком тих скриптів, які викликані з аргументом start.

Отже, не розглядаючи всіх скриптів, ми можемо побачити, що коли система переходить на 3-й рівень запуску, вона спочатку запускає команду K09dm (тобто /etc/rc.d/init.d/dm stop). Далі вона запускає всі скрипти S: спочатку S01udev, який у свою чергу викликає /etc/rc.d/init.d/udev start, потім S03iptables і так далі.

Озброївшись цієї інформацією, ви за кілька хвилин зможете створити свій власний рівень запуску (задіявши, наприклад, 4-й), чи запобігти запуску чи зупинці служби, видаливши відповідне символічне посилання.

2.1. Налаштування рівнів запуску служб

Ви також можете скористатися командою chkconfig для додавання, видалення, вмикання або вимикання служб на заданих рівнях запуску. Використовуйте команду chkconfig --add ім'я_служби для додавання (включення) служби ім'я_служби на всіх підтримуємих[31] рівнях запуску і chkconfig --del ім'я_служби для видалення (вимикання) названої служби на всіх рівнях запуску.

[Підказка]Підказка

Виконайте команду chkconfig --list, щоб побачити список підтримуваних служб, їхні імена і стан для всіх визначених рівнів запуску.

Виконання команди chkconfig --levels 35 sshd on активує сервер SSH (sshd) на 3-му і 5-му рівнях, а виконання chkconfig --levels 3 sound off відключить підтримку звуку на 3-му рівні. Якщо ви опустите параметр --levels список_рівнів, названі служби буде включено чи вимкнено на рівнях запуску 2, 3, 4 та 5. Але зверніть увагу, що ви можете включити служби на рівнях запуску без відповідної підтримки цих служб, тому потрібні рівні запуску краще вказувати явно.

2.2. Керування службами в працюючій системі

У працюючій системі службами можна управляти за допомогою команди service, незалежно від того, чи налаштовані вони на запуск на певному рівні запуску, чи ні. Її синтаксис:

service ім'я_служби дія

Де ім'я_служби - цю назва служби, що виведене командою chkconfig --list, а дія може бути однією із наступних:

start

Запускає названу службу. Будь ласка, зверніть увагу, що більшість служб попередять вас, якщо вони вже виконуються, а ви намагаєтеся знову запустити їх: використовуйте натомість опцію restart, описану нижче.

stop

Зупиняє названу службу. Будь ласка, зверніть увагу, що коли ви зупините службу, всіх підключених до неї користувачів буде автоматично відключено.

restart

Зупиняє, а потім запускає названу службу. Це еквівалентно виконанню команди service ім'я_служби stop && service ім'я_служби start. Будь ласка, зверніть увагу, що коли ви перезапустите службу, всіх підключених до неї користувачів буде автоматично відключено.

інші дії, що залежать від служби

Різні служби підтримують різні дій (попередні дії підтримуються всіма службами). Наприклад, reload перезавантажує файл конфігурації без перезапуску самої служби; force-stop примусово зупиняє службу; status повідомляє про стан служби; та ін. Виконання service ім'я_служби без параметрів виводить інформацію про всіх дії, що підтримуються названої службою.



[31] Підтримуємі” рівні виконання означає, що, наприклад, мережні служби не буде додано на 2-й рівень, який не підтримує роботу з мережею.