Система ініціалізації upstart що це таке і як це працює

Розміщення серверів в надійних дата-центрах Європи. Відкрийте хмарний VPS / VDS сервер на швидких SSD за 1 хвилину!

Кращий хостинг:
- захистить дані від несанкціонованого доступу в охоронюваному європейському ЦОДі
- прийме оплату хоч в bitcoin.
- дозволить поставити свій дистрибутив

- захист від DDos-атак
- безкоштовний backup
- Uptime 99,9999%
- ЦОД - TIER III
- провайдер - TIER I

Підтримаємо російською мовою 24/7/365 Працюємо з юрособами і фізособами. Вам прямо зараз потрібно 24 ядра і 72 Gb RAM. Будь ласка!

Наші вигідні тарифи доведуть, що дешевий хостинг ви ще не знали!

Хвилинна справа: виберіть конфігурацію, оплатіть і CMS на VPS готова.
Money Back - 30 днів!

Банківськими картами, електронною валютою, через термінали Qiwi, Webmoney, PayPal, Новоплат і ін.

Задайте питання в службу підтримки 24/7/365

Знайдіть відповіді в нашій базі і познайомтеся з рекомендаціями

Ініціалізація - це дуже важлива процедура, що лежить в основі будь-якої операційної системи на основі Unix. Вона управляє сервісами і сценаріями. Особливо ініціалізація важлива для серверів, які потребують оптимізації продуктивності.

Ініціалізація складається з наступних етапів:

  • Завантаження сервера;
  • Запуск процесу init (як правило, він має PID 1);
  • Запуск послідовності зумовлених завдань;

Ініціалізація забезпечує коректний запуск і відключення сервера.

У цьому посібнику йтиметься про Upstart - зручною і продуктивною системі ініціалізації.

Короткий огляд Upstart

Система Upstart спочатку розроблялася з упором на гнучкість, тому пропонує безліч підходів, яких немає в стандартних системах ініціалізації. За замовчуванням її використовую т системи Red Hat Enterprise Linux (RHEL) 6, Chrome OS і дистрибутиви Ubuntu до версії 15.04.

Upstart ділить робочі процеси (jobs) на завдання (task jobs) і сервіси (service jobs, можуть працювати у фоновому режимі). Також існують процеси, які працюють до тих пір, поки їх не зупинить користувач.

Події - це сигнали, або виклики, які ініціюють певну дію. Найбільш загальним прикладом події є моніторинг процесу (starting, started, stopping, stopped).

Реалізація подій

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

initctl emit

Ще одна корисна команда для роботи з Upstart: init control.

конфігурації процесу

Примітка. Система Upstart дуже продуктивна в Ubuntu, тому в цьому посібнику використовується сервер Ubuntu 14.04.

Щоб настройки процесу були валідними, конфігураційний файл повинен відповідати таким вимогам:

  • Він не повинен бути порожнім;
  • Чи не повинен містити помилок;
  • Повинен містити хоча б один блок команд (stanza).

Тепер спробуйте створити файл testjob.conf в каталозі / etc / init. Розширення файлу .conf вказує на файл конфігурацій процесу.

sudo nano /etc/init/testjob.conf

Нехай це процес записує повідомлення та поточну мітку часу в лог-файл.

description "A test job file for experimenting with Upstart"
author "Your Name"

Цей процес повинен завантажуватися після того, як буде завантажено всі інші сервіси і процеси. Для цього додайте рядок:

start on runlevel [2345]

Рівень виконання, або runlevel - це режим роботи операційної системи комп'ютера. Рівні виконання позначаються цифрами від 0 до 6.

Тепер потрібно додати виконуваний код. Рядок починається з exec, щоб позначити, що даний код повинен бути оброблений оболонкою Bash.

exec echo Test Job ran at `date` >> /var/log/testjob.log

Зверніть увагу: команда echo використовує зворотні лапки, щоб запустити команду date, а потім записує результат команди в лог. Якщо ви пропустите зворотні лапки, на екрані просто відобразиться слово date.

Збережіть і закрийте файл.

Щоб переконатися, що все працює коректно, запустіть процес вручну. Але спочатку потрібно перевірити синтаксис на помилки:

Якщо команда виявила помилки, виправте їх. Якщо помилок немає, команда поверне:

File /etc/init/testjob.conf: syntax ok

За допомогою наступної команди можна управляти процесами і фоновими сервісами (наприклад веб-сервером). Її базовий синтаксис:

sudo service

В поле control можна використовувати такі команди:

  • restart: перезапуск
  • start: запуск
  • stop: зупинка сервісу
  • status: стан сервісу

Щоб вручну запустити процес, використовуйте команду:

sudo service testjob start

Тепер перевірте файл testjob.log:

Ця команда прочитає заданий файл і виведе його вміст:

Це означає, що тестовий процес працює правильно.

Перезапустіть сервер, увійдіть і знову запустіть команду:

У файлі повинна з'явитися ще один рядок:

Так на прикладі одного процесу ви навчилися основам Upstart. Тепер пора ознайомитися з подіями і станами процесів.

Стан процесів і події

Процеси системи зберігаються в каталозі / etc / init /, а процеси користувачів - в каталозі

Робочі процеси користувачів запускаються в їх сесіях. Такі процеси не є загальносистемними.

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

Кожна така задача має на меті запуск (start) або зупинку (stop). Між цими двома цілями знаходиться ряд станів завдання, що визначає поточне дію процесу в залежності від мети.

  • waiting: початковий стан процесу.
  • starting: підготовка до запуску.
  • pre-start: завантаження передпускових завдань.
  • spawned: запуск розділів сценарію.
  • post-start: виконання операцій після запуску процесу.
  • running: процес повністю запущений.
  • pre-stop: підготовка до зупинки процесу.
  • stopping: зупинка процесу.
  • killed: процес зупинений.
  • post-stop: чистка оточення після зупинки процесу.

Процес в стані post-start вважається запущеним процесом. Він залишається запущеним до стану pre-stop, в якому він готується до зупинки. Після цього процес зупиняється і переходить в стан post-stop (очищення системи).

Щоб побачити, як процес змінює свої статки, переведіть пріоритет балки Upstart (/ var / log / upstart /) в debug:

sudo initctl log-priority debug

Зверніть увагу: стану і події - не одне й те саме.

процеси сервісів

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

Для прикладу спробуйте встановити сервер Node.js.

Примітка. Node.js - це кроссплатформенная середовище для серверних і мережевих додатків.

Node.js - дуже легкий пакет, але за замовчуванням він не встановлений в Ubuntu 14.04. Щоб встановити його, введіть:

sudo apt-get install nodejs

Тепер спробуйте створити сервіс. Для цього створіть новий файл nodetest.conf в каталозі / etc / init.

sudo nano /etc/init/nodetest.conf

Примітка. Назва файлу повинна бути описовим.

description "Service for a test node.js server"
author "Your Name"

Щоб налаштувати автоматичний запуск і відключення цього додатка на основі Node, додайте в файл такі рядки:

start on filesystem or runlevel [2345]
stop on shutdown

Рівень запуску в поєднанні з подією filesystem забезпечує запуск процесу під час завантаження сервера.

Тепер потрібно додати в файл певні раніше блоки. Оскільки це додаток є серверним, потрібно додати в конфігурації логирование. Щоб реєструвати запуск і зупинку додатки, використовуйте дії script, pre-start script і pre-stop script.

Як бачите, pre-start і pre-stop - це стану процесів, але їх можна додавати в блоки.

Спочатку потрібно додати сам сценарій процесу. Він отримає ID процесу для фонового сервера Node, а потім запустить сценарій програми. Зверніть увагу на відступи в блоці - вони важливі для коректного синтаксису.

export HOME = "/ srv"
echo $$> /var/run/nodetest.pid
exec / usr / bin / nodejs /srv/nodetest.js

Додатком Node необхідна змінна домашнього каталогу, тому / srv експортується в першому рядку блоку. Символи $$ встановлюють PID процесу і створюють файл для нього.

Тепер зосередьтеся на pre-start і pre-stop. Дата, а також повідомлення про запуск і зупинку процесу, будуть внесені в лог:

echo "[` date`] Node Test Starting ">> /var/log/nodetest.log

Зверніть увагу: блок pre-stop містить рядок, яка видаляє PID-файл. Це завдання буде частиною процесу зупинки.

rm /var/run/nodetest.pid
echo "[` date`] Node Test Stopping ">> /var/log/nodetest.log

В результаті файл буде мати такий вигляд:

description "Test node.js server"
author "Your Name"
start on filesystem or runlevel [2345]
stop on shutdown
script

export HOME = "/ srv"
echo $$> /var/run/nodetest.pid
exec / usr / bin / nodejs /srv/nodetest.js

end script
pre-start script

echo "[` date`] Node Test Starting ">> /var/log/nodetest.log
end script

rm /var/run/nodetest.pid
echo "[` date`] Node Test Stopping ">> /var/log/nodetest.log

Збережіть і закрийте файл.

Як сказано в рядку exec, сценарій Node.js буде запущений з сервера, тому потрібно створити файл nodetest.js:

sudo nano /srv/nodetest.js

Отриманий сценарій виконує наступні дії:

  • Запрошувати HTTP-модуль Node.
  • Створює веб-сервер HTTP.
  • Provide a status 200 (OK) response in the Header
  • Повертає фразу Hello World.
  • Прослуховує порт 8888.

За допомогою наступного коду можна запустити додаток Node:

var http = require ( "http");
http.createServer (function (request, response) response.writeHead (200,);
response.write ( "Hello World");
response.end ();
>). Listen (8888);

Зберігши файл, переконайтеся, що в синтаксисі немає помилок.

init-checkconf /etc/init/nodetest.conf
File nodetest.conf: syntax ok

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

На екрані з'явиться фраза Hello World.

Тепер потрібно перевірити, чи працює логирование. Відкрийте вказаний в налаштуваннях лог і знайдіть в ньому мітки часу в рядку Starting. Після зупинки сервісу в балці з'явиться рядок Stopping.

Для запуску стандартних команд (start, stop, restart і т.д.) використовується наступний синтаксис:

sudo service nodetest restart

висновок

Даний посібник охоплює тільки основи роботи з Upstart. Відкрита система Upstart - продуктивне і надійний засіб для написання процесів.