Молниеносная загрузка тукса Денис Колисниченко Хакер, номер #087, стр. 087-126-4 Более корректным способом добавления служб на уровень запуска является использование программы ng-update, поскольку она учитывает зависимости между службами. Что это такое? Например, у нас есть демон Б, который зависит от службы А. Если ты хочешь добавить в уровень демон Б, то нужно прописать его после А, которая должна быть уже запущенной к моменту запуска Б. То есть, редактируя файлы уровней, ты должен четко понимать, что делаешь. Если в чем-то не уверен, используй ng-update - эту программу мы рассмотрим чуть позже. [i-файлы] Перед тем как перейти к рассмотрению формата i-файлов, нужно знать, какие типы служб можно описывать в этих самых i-файлах. Службы бывают трех типов: демоны (daemon), сервисы (service) и виртуальные службы (virtual). Демон запускается и после запуска не завершает свою работу, оставаясь в памяти. Может получить один из двух статусов - RUNNING, означающий, что демон нормально работает, или FAIL_STARTING - запуск демона завершился с ошибкой. Если при запуске демона произошел сбой, то все зависящие от него службы будут остановлены. Сервис запускается, выполняет свою работу (например, монтирует файловые системы или загружает системный шрифт), а потом завершается. Виртуальная служба вообще ничего не делает, она просто зависит от других. Если “виртуал” загружен, то можно быть уверенным - все службы, от которых он зависит, запущены. Рассмотрим пример файла daemon/httpd.i: daemon daemon/httpd { need = system/bootmisc; require_network; use = daemon/sshd daemon/mysql daemon/postgres system/netmount; exec daemon = /usr/sbin/httpd; pid_file = /var/run/httpd.pid; } Ключевое слово daemon говорит само за себя: httpd - демон. Initng различает службы не по имени файла, а по идентификатору, стоящему после служебного слова daemon (service/virtual), что позволяет описывать в одном файле нечто вроде: daemon daemon/agetty/* { need = system/bootmisc; env DEV_PRE=tty; exec daemon = /sbin/agetty 38400 ${DEV_PRE}${NAME}; respawn; } Вернемся к нашему httpd. Директивы need и use позволяют строить зависимости (об этом мы поговорим чуть позже). Демону httpd нужна сеть, соответственно, без require-network не обойтись. Exec задает исполняемый файл службы (демона). Имя файла с уникальным идентификатором процесса службы указывается с помощью pid_file. Я не случайно привел листинг службы-демона agetty. Обрати внимание на директивы ENV и respawn. Первая используется для установки переменных окружений, а вторая перезапускает службу в случае ее аварийного завершения. [зависимости и конфликты] Директива need позволяет указать службы, от которых зависит наша служба. Если данные службы не были запущены, то перед запуском нашей службы initng запустит все, что ты указал с помощью need. Директива use используется иначе: она просто указывает, какие службы может использовать наша служба. Если данные службы не запущены, initng не станет их запускать. Директива use используется для того, чтобы определить порядок запуска служб. Данная информация учитывается при добавления служб на требуемый уровень с помощью утилиты ng-update. |