Created Friday 29 August 2014
Upstart — cистема инициализации ОС, которая контролирует запуск демонов в течение загрузки системы, их остановку, а также управление ими во время работы системы. Основанная на событиях замена cистемы инициализации init в UNIX и Linux системах. Первоначально была разработана для дистрибутива Ubuntu, но затем стала использоваться и в других дистрибутивах Linux, например в Fedora (впоследствии была заменена systemd), как замена UNIX System V init. В настоящее время признана устаревшей и для многих дистрибутивов планируется переход на systemd.
Возможности
Задачи и службы запускаются и останавливаются по событиям
События генерируются задачами и службами
События могут быть приняты от любого процесса системы
Службы могут быть перезапущены, если они были завершены
Взаимодействие с демоном init посредством D-Bus
Можно организовывать свои события
================================================================================
Что такое 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--