Тонка настройка автозавантаження в ubuntu server

Блог ім. KungFux → Тонка настройка автозавантаження в Ubuntu Server

Метою даної статті є ознайомлення з принципами автозавантаження в операційній системі Ubuntu на прикладі Ubuntu Server 10.04 LTS, а також демонстрація настройки автозавантаження віртуальної машини, що працює під управлінням VirtualBox, і коректне завершення роботи останньої в автоматичному режимі при виключенні Ubuntu Server.







Увага! Описаний нижче приклад не може бути застосовний до налаштування автозавантаження графічних додатків для конкретного користувача системи в настільних версіях Ubuntu. Для цього використовуйте пункт «Запущені додатки» з головного меню Ubuntu.

Що таке автозавантаження?
В першу чергу, це автоматичний запуск сервісів / додатків при старті операційної системи. Автозавантаження також може забезпечувати коректне завершення цих служб / додатків при виключенні або перезавантаження системи.

Організація автозавантаження в Ubuntu Server.
Зрозуміло, для того, щоб правильно запустити / зупинити сервіс, необхідно описати сценарій з командами для запуску / зупинки. Погляньте на вміст каталогу /etc/init.d: ​​він містить скрипти, які керують завантаженнями / зупинками сервісів на вашій машині. Отже, перший, але не останній пункт успішної настройки - це наявність скрипта в /etc/init.d. В скрипті не описується, коли повинен виконуватися той чи інший сценарій. Він лише може приймати параметри start, stop, restart і так далі. Звідки ж Ubuntu знає, коли необхідно викликати скрипт? Відповідь криється в каталогах /etc/rcN.d, де N - це цифра від 0 до 6. У цих каталогах зберігаються символічні посилання на скрипти з /etc/init.d. Розглянемо, що означає кожен каталог, і все відразу стане зрозуміло:
- rc0.d - виконання скрипта при виключенні системи;
- rc1.d - виконання скрипта при запуску системи в режимі одного;
- rc2.d - виконання скрипта при запуску системи в многопользовательском режимі;
- rc3.d - rc5.d - зарезервовано;
- rc6.d - виконання скрипта при перезавантаженні системи.

Наприклад, якщо відбувається перезавантаження, то будуть виконані всі скрипти з каталогу /etc/rc6.d, при виключенні - з /etc/rc0.d і так далі. Цифра в назві каталогу називається рівнем запуску. Тобто каталог /etc/rc0.d буде називатися нульовим рівнем запуску і так далі.
Є ще один важливий момент, який необхідно знати - це черговість виконання скриптів з каталогів rcN.d. Адже для правильної організації запуску / зупинки роботи Ubuntu може знадобитися запускати / зупиняти сервіси в певному порядку. Цей момент вирішується спеціальним ім'ям файлів в каталогах рівнів запуску. Файли мають такі імена: [S | K] NN [ім'я], де [S | K] - це один символ ( «S» означає, що скрипт запускає сервіс, «K» - зупиняє), NN - порядковий номер, [ім'я ] - ім'я файлу. Символ «S» або «K» самостійно вибирати не доведеться, тому що всі скрипти в каталогах rc1.d-rc5.d повинні починатися з символу «S», а в каталогах rc0.d і rc6.d - з символу «K» . Число «NN» визначає черговість запуску скриптів, який проводиться від меншого до більшого. Чим менше число у скрипта для запуску, тим раніше він буде запущений при старті системи; чим більше число у скрипта зупинки сервісу, тим пізніше він буде виконаний.







При необхідності запуску будь-якої служби або програми до або після конкретного існуючого сервісу просто підглянете його порядковий номер у відповідній директорії rcN.d і враховуйте при виборі порядкового номера для свого скрипта.

Ну що ж, де зберігати скрипти і як їх називати зрозуміло, а ось як його написати?
В каталозі /etc/init.d знаходиться приклад скрипта для управління запуском / зупинкою сервісів. Це файл /etc/init.d/skeleton, а в прикладі нижче він буде спрощено. Для створення нового скрипта необхідно зробити копію прикладу і відредагувати його під свої потреби. Скористаємося наступною командою:


При створенні нового скрипта не забувайте давати йому права на виконання. Щоб додати права на виконання скрипту, використовуйте команду sudo chmod + x /etc/init.d/myscript

Скрипт готовий. Що далі?
У деяких джерелах зустрічаються рекомендації по створенню символічних посилань вручну за допомогою команди ln, не дивлячись на існування спеціальних утиліт. Перед додаванням скрипта утиліта перевіряє його на валідність, а команда ln створить посилання навіть при наявність помилок. Краще віддати перевагу спеціалізованим утилітам, таким як update-rc.d, яка поставляється в комплекті з Ubuntu. З її допомогою можна додати новий скрипт в будь-який рівень завантаження, видалити існуючий і так далі. Ось приклад використання:


Ця команда додасть новий скрипт «myscript» до всіх рівнів завантаження. Буде виконаний запуск сервісу на рівнях з 2 по 5 з пріоритетом 99 (в останню чергу) і зупинка сервісу на 0, 1 і 6 рівнях з пріоритетом 01 (найпершим).
Щоб видалити скрипт з автозавантаження, скористайтеся командою:


Розглянемо приклад налаштування автозавантаження.
Завдання: налаштувати автоматичний запуск віртуальної машини, що працює під управлінням VirtualBox, яка повинна запускатися через дві хвилини після запуску операційної системи Ubuntu Server. При виключенні або перезавантаження Ubuntu Server віртуальна машина повинна коректно завершувати свою роботу.
Припустимо, що на Ubuntu Server встановлений VirtualBox і існує віртуальна машина з ім'ям «Slave», операційна система якої підтримує можливість коректного завершення роботи при натисканні кнопки вимикання комп'ютера (підтримка ACPI).

Для початку напишемо скрипт, який буде розташовуватися в каталозі /etc/init.d:


Відредагувавши скрипт і залишивши лише мінімально необхідну, отримуємо файл з наступним змістом:


Додамо скрипт до всіх рівнів запуску:

Перевантажити, можна перевірити, що команда запуску віртуальної машини була виконана. Подивимося звіт про запуск:

В останньому рядку присутній текст, який був виведений скриптом «slave».
Більш того, написаними скриптами для init.d можна користуватися з терміналу в будь-який момент часу. Наприклад, для запуску віртуальної машини виконаємо команду:


Як видно з прикладу, операційна система Ubuntu надає багаті можливості для управління запуском / зупинкою сервісів / програм. У скриптах автозавантаження можна описувати залежності Початок / зупинка служб від інших служб за допомогою секцій «Required-Start / Required-Stop», та й сам скрипт може бути будь-якої складності, що дозволяє організувати навіть саму «тонку» автозагрузку.

НЕ срач заради, просто раніше було 3 режим розрахований на багато користувачів консольний режим (rc3.d), а 5 графічний многополоьзовательскій (rc5.d) - в Убунту і це поміняли?







Схожі статті