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/.
Примерно, так. Если где ошибся - поправляйте.
Александр:
Большое спасибо за статью, разложил у себя в мозгу все по полочка.
Ответить
30 ноября 2010, 4:37Рамиль:
До прочтения статьи не понимал как взаимодействуют между собой upstart и классическая схема запуска. Спасибо, помогли разобраться!
Ответить
11 октября 2011, 18:24