Created Friday 29 August 2014

Upstart cистема инициализации ОС, которая контролирует запуск демонов в течение загрузки системы, их остановку, а также управление ими во время работы системы. Основанная на событиях замена cистемы инициализации init в UNIX и Linux системах. Первоначально была разработана для дистрибутива Ubuntu, но затем стала использоваться и в других дистрибутивах Linux, например в Fedora (впоследствии была заменена systemd), как замена UNIX System V init. В настоящее время признана устаревшей и для многих дистрибутивов планируется переход на systemd.

Возможности

Задачи и службы запускаются и останавливаются по событиям

События генерируются задачами и службами

События могут быть приняты от любого процесса системы

Службы могут быть перезапущены, если они были завершены

Взаимодействие с демоном init посредством D-Bus

Можно организовывать свои события

http://upstart.ubuntu.com/

Upstart-PDF, Cookbook

================================================================================

Что такое upstart и как это работает

upstart - это замена стандартного процесса /sbin/init, которая управляет запуском служб во время старта системы, остановкой их во время выключения системы и наблюдением за службами во время работы системы и которая основана на событиях.

upstart - использует конфигурационные файлы, расположенные в директории /etc/init/. Собранные там файлы являются заменой файла inittab.

Как и в классическом варианте - upstart имеет главный процесс, который отвечает за загрузку и управление демонами. Называется он также как и в классическом варианте - init. Чтобы понять "кто есть кто" посмотрите отсутствует ли в системе файл /etc/inittab и присутствует ли каталог /etc/init/. Если это так, значит у вас установлен upstart.

Настройка и создание своего job

Стартовые скрипты(jobs) upstart расположены папке /etc/init/. Папка /etc/init.d/ и скрипты в ней так же сохранены для обратной совместимости. Если вам необходимо добавить в автозагрузку какой либо процесс, то необходимо в папке /etc/init/ создать файл конфигурации этого процесса.

Например для запуска демона svscanboot относящегося к системе deamontools, я создал файл svscanboot.conf следующего содержания:

-----------------------------------------

start on runlevel [2345]

stop on runlevel [!2345]

respawn

exec /usr/bin/svscanboot

-----------------------------------------

start on runlevel [2345] – означает что процесс будет запущен на 2,3,4,5 уровнях запуска.

stop on runlevel [!2345] – означает что процесс будет остановлен на всех уровнях запуска отличающихся от 2,3,4,5 (восклицальный занк означает отрицание).

respawn – процесс будет перезапущен в случает падения.

exec – команда непосредственно запускает сервис.

После создания файла svscanboot.conf для запуска сервиса svscanboot можно использовать команду:

$ sudo start svscanboot

Для остановки:

$ sudo stop svscanboot

Что бы узнать запущен ли сейчас сервис svscanboot можем использовать команду:

$ sudo status svscanboot

Upstart разделяет процессы на службы (service) и задачи (task). Разница между службой и задачей состоит в том, что служба перезапускается при падении, а задача — нет. Каждый стартовый скрипт должен иметь запись script или exec.

exec – используется в случае, когда вы запускаете какую-то программу с вашей файловой системы с возможностью передачи дополнительных параметров вызываемой программе.

script – используется для вставки bash-кода непосредственно в файл задания. Все, что вы здесь укажете, будет выполнено стандартным интерпретатором /bin/sh с параметром -e, таким образом позволяя прервать скрипт в случае неправильного использования любой команды. Запись script должна заканчиваться строкой «end script».

Сервисы в терминологии upstart называются «Jobs». Управление ими происходит утилитой initctl.

$ sudo initctl list – позволяет посмотреть статусы всех сервисов которыми управляет upstart.

$ sudo initctl version – позволяет узнать верисию upstart

initctl emit

При помощи это команды у вас есть возможность генерировать любое событие. Очень удобная штука при написании собственных заданий. Например, имеется задание:

on bounce exec echo --Bounced-- console output

Следующая команда заставит его выполниться

# initctl emit bounce

# --Bounced--