Страницы

воскресенье, 25 марта 2012 г.

Upstart. интересное в Ubuntu 12.04

Upstart система загрузки служб, приложений при запуске операционной системы. На микросервере Ubuntu 12.04 используется как основная. Также доступен старый способ SysV.

$initctl --version
На микросервере используется Upstart 1.4.

Понятия
Работа (Job)
Разновидности работы: Задача (Task) и Сервис (Service)
Задача - живет не долго, может завершаться быстро.
Служба - запущена постоянно, может перезапускаться при падении, но никогда сама, по своему хотению не останавливается, аналог демона.

Системные работы (работы по системе) расположены в каталоге /etc/init/ в конфигурационных файлах работ.
Пользовательские работы (задачи и м.б. сервисы) расположены в каталоге $HOME/.init/. Их надо включать спец. настройкой.


Включение поддержки пользовательских задач Upstart
Это необходимо.
Редактируется файл: /etc/dbus-1/system.d/Upstart.conf
В нем пару секций в которых присутствует root надо скопировать тут же и заменить на имя пользователя.


Конфигурации работ - это обычные, не исполняемые текстовые файлы, однако содержащие команды понимаемые демоном init. Расширение работы - .conf Имя совпадает с именем запускаемого демона, но не всегда.

Как создать свою задачу для Upstart

Создаем минимальный конфигурационный файл работы /etc/init/mytask.conf
# Тестовая задача по посылке сообщения в системный журнал
# дата изменения: 23 марта 2012
# сервер: микросервер
# зарезервированное слов "task" указывает что это задача, т.е. выполниться и все.
task
exec echo "hello" >> /var/log/syslog

Как создать свою службу для Upstart

Создаем минимальный конфигурационный файл работы /etc/init/myservice.conf
# Тестовая работа по запуску службы myservice
# дата изменения: 23 марта 2012
# сервер: микросервер
# подразумевается, демон службы существует в пути запуска и запускается в качестве демона
exec /usr/local/bin/myservice

Этот минимальный файл пригоден для ручного запуска/остановки службы myservice

Шаблон содержимого файла конфигурации работ

# Работа по ...
# дата изменения: 23 марта 2012 
# сервер: микросервер


# task - признак кратковременной работы, а не службы
# task



author "gimmor.blogspot.com"
description "шаблон работы для Upstart"

# manual - это работа только ручного управления
#manual

# Параметры передаваемые работе
# работа с параметрами запускается start job ARGUMENT1=1 ARG2=2 PARAMETER=3
instance $ARGUMENT1
instance $ARG2
instance $PARAMETER

# Параметры окружения

# Главный скрипт, может быть заменен термом exec
script
end script


# способы получения PID главного процесса
#expect fork
#expect daemon




# Скрипт выполняющийся перед главным скриптом при запуске
pre-start script
#
end script


# Скрипт выполняющийся после главным скриптом при запуске
post-start script
#
end script


# Скрипт выполняющийся перед остановкой
pre-stop script
#
end script


# События от других работ, на которые реагирует работа
#start on starting
#start on stoping
#stop on stoping


# События сигналы 
start on мой-сигнал-старта
stop on мой-сигнал-стопа


Как преобразовывать существующие службы и их скрипты запуска, в работы для Upstart?
Основная трудность - это получение PID мастер процесса, чтобы Upstart мог управлять стартом остановкой главного процесса.
Если upstart не может узнать PID процесса, то все такие задачи и службы он переводить из состояния start в stop, при этом в списке процессов они присутствуют, но не управляются Upstart.
Для помощи Upstart в этом нелегком деле существуют термы:
expect fork
expect daemon


События
События асинхронные  - сигналы (singal)
# initctl emit <event>
События синхронные - методы (method)
# initctl emit <event>
в качестве <event> может выступать строка текста


Примеры использования постепенно появляются у меня в блоге, например, iptv-видеорекордер, полностью сделан на Upstart. Подключение к Интернет, через L2TP также переведено на эту систему.


Ресурсы

- . http://upstart.ubuntu.com/cookbook/

Комментариев нет: