Upstart и совместимость с традиционным init

В статье upstart в Ubuntu я постарался разложить для себя по полочкам работу системы upstart, на примере таковой в операционной системе Ubuntu 9.10. Об основных особенностях upstart я упомянул, но забыл о такой вещи как совместимость со старой схемой запуска - когда используются скрипты написанные для традиционного демона init. Поэтому здесь небольшое дополнение на эту тему. Если вы только знакомитесь с upstart, рекомендую прочесть сначала статью upstart в Ubuntu.

Многие классические демоны, запускаются скриптами расположенными в каталоге /etc/init.d/. То есть при установке такого демона, управляющий скрипт копируется в каталог /etc/init.d/ и в в соответствующих каталогах /etc/rcX.d/ прописываются символические ссылки для запуска демона на соответствующих уровнях запуска.

Upstart просматривает и выполняет только файлы-задания расположенные в каталоге /etc/init/, поэтому для того, чтобы выполнялись скрипты из каталогов /etc/rcX.d/, необходимо “сказать” об этом upstart. Для этой цели в каталоге /etc/init/ находится файл-задание rc.conf. Именно благодаря этому файлу и просисходит просмотр и запуск скриптов для стандартного init из каталога /etc/rcX.d/. Вот текст rc.conf:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# rc - System V runlevel compatibility
#
# This task runs the old System V-style rc script when changing between
# runlevels.

description     "System V runlevel compatibility"
author          "Scott James Remnant <scott@netsplit.com>"

start on runlevel [0123456]
stop on runlevel [!$RUNLEVEL]

export RUNLEVEL
export PREVLEVEL

console output
env INIT_VERBOSE

task

exec /etc/init.d/rc $RUNLEVEL

Выполняя этот файл-задание, upstart запускает скрипт /etc/init.d/rc с передачей ему уровня запуска ($RUNLEVEL). Эта запись фактически реализует блок из файла /etc/inittab, который является основным конфигурационным файлом для классического демона init:

1
2
3
4
5
6
7
l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6

А дальше уже по классической схеме - скрипт rc начинает выполнять скрипты из соответствующего каталога /etc/rcX.d/.

Примерно, так. Если где ошибся - поправляйте.

Статьи и новости схожей тематики:

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

  1. Александр:

    Большое спасибо за статью, разложил у себя в мозгу все по полочка.

    Ответить

  2. Рамиль:

    До прочтения статьи не понимал как взаимодействуют между собой upstart и классическая схема запуска. Спасибо, помогли разобраться!

    Ответить

Оставьте свой отзыв