Какие системы инициализации для linux вы знаете выберите все подходящие варианты

мЙЮОЩЕ ЪБРЙУЙ
Linux, РТПЗТБННЩ — РТПВМЕНЩ Й ТЕЫЕОЙС

уЙУФЕНЩ ЙОЙГЙБМЙЪБГЙК linux

уХЭЕУФЧХЕФ ОЕУЛПМШЛП УЙУФЕН ЙОЙГЙБМЙЪБГЙЙ. тБУУНПФТЙН ЙИ:
1) уЙУФЕНБ ЙОЙГЙБМЙЪБГЙЙ init (Ч РТПГЕУУЕ ЪБРХУЛБ СДТБ НПОФЙТХЕФУС ЛПТОЕЧБС ЖБКМПЧБС УЙУФЕНБ Й ЪБРХУЛБЕФУС РТПЗТБННБ init, ЛПФПТБС Й ЧЩРПМОСЕФ ДБМШОЕКЫХА ЙОЙГЙБМЙЪБГЙА УЙУФЕНЩ).
2) уЙУФЕНБ initng (РПЪЧПМСЕФ УХЭЕУФЧЕООП ХУЛПТЙФШ ЪБРХУЛ Linux, ОП ПОБ РПЛБ ЕЭЕ ЬЛУРЕТЙНЕОФБМШОБС, РПЬФПНХ ОЕ ХУФБОБЧМЙЧБЕФУС Ч ДЙУФТЙВХФЙЧБИ РП ХНПМЮБОЙА. пДОБЛП ЧЩ НПЦЕФЕ УБНПУФПСФЕМШОП ЕЕ ХУФБОПЧЙФШ Й РПРТПВПЧБФШ ЙУРПМШЪПЧБФШ — ХДБМЙФШ ЕЕ ЧУЕЗДБ НПЦОП, ЕУМЙ ПОБ ЧБУ ЮЕН-ФП ОЕ ХУФТПЙФ)
3) уЙУФЕНБ upstart ВЩМБ УРЕГЙБМШОП ТБЪТБВПФБОБ ДМС ДЙУФТЙВХФЙЧБ Ubuntu Linux, ОП ЕЕ РТЙ ЦЕМБОЙЙ НПЦОП ХУФБОПЧЙФШ Ч МАВПН ДЙУФТЙВХФЙЧЕ.

оБЮОЕН РП РПТСДЛХ:

1) уЙУФЕНБ ЙОЙГЙБМЙЪБГЙЙ init

рТПЗТБННБ init ЮЙФБЕФ ЛПОЖЙЗХТБГЙПООЩК ЖБКМ /etc/inittab Й ЪБРХУЛБЕФ ДТХЗЙЕ РТПГЕУУЩ, УПЗМБУОП ЙОУФТХЛГЙСН ЬФПЗП ЖБКМБ.
пДОБ ЙЪ ЗМБЧОЩИ ЙОУФТХЛГЙК ЖБКМБ /etc/inittab ЧЩЗМСДЙФ ФБЛ:
id: : initdefault
ьФБ ЙОУФТХЛГЙС ЪБДБЕФ ХТПЧЕОШ ЪБРХУЛБ РП ХНПМЮБОЙА. хТПЧЕОШ ЪБРХУЛБ ПРТЕДЕМСЕФ, ЛБЛЙЕ ДЕКУФЧЙС ВХДХФ ЧЩРПМОЕОЩ РТПЗТБННПК init (ЛБЛЙЕ РТПГЕУУЩ ЪБРХЭЕОЩ). чУЕЗП РТЕДХУНПФТЕОП ЫЕУФШ ХТПЧОЕК ЪБРХУЛБ:
0 — ПУФБОПЧЛБ УЙУФЕНЩ (СУОП, ЮФП Ч ЛБЮЕУФЧЕ ХТПЧОС РП ХНПМЮБОЙА ЬФПФ хТПЧЕОШ ВЩФШ ОЕ НПЦЕФ);
1 — ПДОПРПМШЪПЧБФЕМШУЛЙК ТЕЦЙН (Ч ОЕЗП НПЦОП РЕТЕКФЙ УТБЪХ РТЙ ЪБЗТХЪЛЕ, РЕТЕДБЧ СДТХ РБТБНЕФТ single);
2 — НОПЗПРПМШЪПЧБФЕМШУЛЙК ТЕЦЙН ВЕЪ РПДДЕТЦЛЙ УЕФЙ;
3 — НОПЗПРПМШЪПЧБФЕМШУЛЙК ТЕЦЙН У РПДДЕТЦЛПК УЕФЙ;
4 — ОЕ ЙУРПМШЪХЕФУС;
5 — НОПЗПРПМШЪПЧБФЕМШУЛЙК ЗТБЖЙЮЕУЛЙК ТЕЦЙН У ЪБЗТХЪЛПК X11 Й РПДДЕТЦЛПК УЕФЙ;
6 — РЕТЕЪБЗТХЪЛБ УЙУФЕНЩ.

ч ВПМШЫЙОУФЧЕ УМХЮБЕЧ Ч ЛБЮЕУФЧЕ ХТПЧОС ЪБРХУЛБ РП ХНПМЮБОЙА ХУФБОБЧМЙЧБЕФУС 3 ЙМЙ 5.
рЕТЕКФЙ ОБ ФПФ ЙМЙ ЙОПК ХТПЧЕОШ НПЦОП Й РПУМЕ ЪБЗТХЪЛЙ УЙУФЕНЩ. дМС ЬФПЗП ЙУРПМШЪХЕФУС ЛПНБОДБ:
# /sbin/init ‘ХТПЧЕОШ_ЬБРХУЛБ’

«пРТЕДЕМЙЧ» ХТПЧЕОШ ЪБРХУЛБ, init РППЮЕТЕДОП ЪБРХУЛБЕФ УГЕОБТЙЙ ЙЪ ЛБФБМПЗБ /etc/rc.d/rcX.d, ЗДЕ X — ЬФП ОПНЕТ ХТПЧОС ЪБРХУЛБ. еУМЙ ЪБКФЙ Ч ПДЙО ЙЪ ЬФЙИ ЛБФБМПЗПЧ, ОБРТЙНЕТ, Ч
/etc/rc.d/rc3.d, ФП НПЦОП ХЧЙДЕФШ УУЩМЛЙ ЖПТНБФБ:
S ‘ОПНЕТ»ЙНС’
рБТБНЕФТ ‘ОПНЕТ’ ПРТЕДЕМСЕФ РПТСДПЛ ЪБРХУЛБ УГЕОБТЙС (ОБРТЙНЕТ, SlOnetwork ЪБРХУФЙФУС ТБОШЫЕ, ЮЕН S11internet), Б РБТБНЕФТ ‘ЙНС’ — ЪБДБЕФ ЙНС УГЕОБТЙС. уБНЙ УГЕОБТЙЙ ОБИПДСФУС Ч ЛБФБМПЗЕ /etc/rc.d/init.d.

уУЩМЛЙ, ОБЮЙОБАЭЙЕУС ОБ УЙНЧПМ S, — ЬФП УУЩМЛЙ ЪБРХУЛБ (ПФ S, start), РТЙ ЪБРХУЛЕ УППФЧЕФУФЧХАЭЙИ УГЕОБТЙЕЧ ЙН ВХДЕФ РЕТЕДБО БТЗХНЕОФ start. оБРТЙНЕТ, ЕУМЙ init ПВОБТХЦЙМБ Ч /etc/rc.d/rc3.d ЖБКМ SlOnetwork, ФП ПОБ ЧЩРПМОЙФ ЛПНБОДХ:
/etc/rc.d/init.d/network start
еУМЙ ЙНС УУЩМЛЙ ОБЮЙОБЕФУС ОБ ВХЛЧХ л (ПФ kill), ФП ЬФП УУЩМЛБ ПУФБОПЧЛЙ УЕТЧЙУБ, ОБРТЙНЕТ, лп1service. дБООБС УУЩМЛБ ХЛБЪЩЧБЕФ ОБ ЛПНБОДХ:
/etc/rc.d/init.d/service stop
0О НПЦЕФЕ ЪБРХУФЙФШ МАВПК УГЕОБТЙК ЙЪ ЛБФБМПЗБ init.d ОЕРПУТЕДУФЧЕООП, РЕТЕДБЧ ЕНХ РБТБНЕФТЩ start (ЪБРХУЛ), stop (ПУФБОПЧЛБ) Й ДТХЗЙЕ (ЪБЧЙУЙФ ПФ УЕТЧЙУБ). б НПЦЕФЕ ЧПУРПМШЪПЧБФШУС ЛПНБОДПК service:
# service ‘ЙНС_УЕТЧЙУБ’ ‘start|stop|..’
ъДЕУШ ‘ЙНС УЕТЧЙУБ’ — ЬФП ЙНС ЖБКМБ Ч ЛБФБМПЗЕ /etc/rc.d/init.d.
оБРТЙНЕТ ДМС ЪБРХУЛБ Apache НПЦОП ЙУРПМШЪПЧБФШ ЛПНБОДХ:
# rcapache start

тЕДБЛФЙТПЧБФШ ХТПЧОЙ ЪБРХУЛБ НПЦОП ЧТХЮОХА, Б НПЦОП Й У РПНПЭША РТПЗТБНН-ЛПОЖЙЗХТБФПТПЧ:
Ч Fedora — ЛПОЖЙЗХТБФПТ system-config-services;
Ч Ubuntu ДП ЧЕТУЙЙ 9.04 РТЙНЕОСЕФУС ЛПОЖЙЗХТБФПТ services-admin, Б Ч ЧЕТУЙЙ 9.10 УМЕДХЕФ ЙУРПМШЪПЧБФШ ЛПОЖЙЗХТБФПТ bum, ЛПФПТЩК ОХЦОП ХУФБОПЧЙФШ ПФДЕМШОП:
sudo apt-get install bum

2) уЙУФЕНБ ЙОЙГЙБМЙЪБГЙЙ initng
Initng — ЬФП УЙУФЕНБ ЙОЙГЙБМЙЪБГЙЙ Linux УМЕДХАЭЕЗП рПЛПМЕОЙС, РПЪЧПМСАЭБС УХЭЕУФЧЕООП ХУЛПТЙФШ ЪБРХУЛ Linux.

б ЪБ УЮЕФ ЮЕЗП ДПУФЙЗБЕФУС ХУЛПТЕОЙЕ ЪБРХУЛБ Linux? B РПЮЕНХ ОБН Ч ДБМШОЕКЫЕН РТЙДЕФУС РЕТЕКФЙ ОБ initng? ч РТПГЕУУЕ ЪБЗТХЪЛЙ Linux ЪБРХУЛБЕФУС СДТП, ПОП НПОФЙТХЕФ ЛПТОЕЧХА ЖБКМПЧХА УЙУФЕНХ Й ЪБРХУЛБЕФ РТПЗТБННХ init йНЕООП init ЧЩРПМОСЕФ ЧУА ДБМШОЕКЫХА ЙОЙГЙБМЙЪБГЙА УЙУФЕНЩ. рЕТЧЩН ДЕМПН init ЮЙФБЕФ РПМЕ initdefauit Ч ЖБКМЕ /etc/inittab — ЬФП ХТПЧЕОШ ЪБРХУЛБ РП ХНПМЮБОЙА. ч ЪБЧЙУЙНПУФЙ ПФ ХТПЧОС ЪБРХУЛБ init ЪБРХУЛБЕФ УГЕОБТЙЙ, ОБИПДСЭЙЕУС Ч ПДОПН ЙЪ РПДЛБФБМПЗПЧ ЛБФБМПЗБ /etc/rУ.d.
Initng ТБВПФБЕФ ЙОБЮЕ. пОБ ОЕ ЪБРХУЛБЕФ УГЕОБТЙЙ, Б УБНБ ЧЩРПМОСЕФ ДЕКУФЧЙС ХЛБЪБООЩЕ Ч ЖБКМБИ, ЙЗТБАЭЙИ ТПМШ УГЕОБТЙЕЧ ЙОЙГЙБМЙЪБГЙЙ. ч УМХЮБЕ ЦЕ У ПВЩЮОЩН init ОБ УБНПН ДЕМЕ ЙОЙГЙБМЙЪЙТХЕФ УЙУФЕНХ bash, a init ФПМШЛП ЪБРХУЛБЕФ ОХЦОЩЕ УГЕОБТЙЙ — ФП ЕУФШ ЧЩРПМОЕОЙЕ РЕТЕДБЕФУС ДТХЗПК РТПЗТБННЕ (bash), ЛПФПТБС ЬФЙ УГЕОБТЙЙ Й ЧЩРПМОСЕФ. A initng УБНБ, ВЕЪ РПУТЕДОЙЛПЧ, ЧЩРПМОСЕФ ЙОЙГЙБМЙЪБГЙА УЙУФЕНЩ, ЪБ УЮЕФ ЮЕЗП Й ДПУФЙЗБЕФУС УПЛТБЭЕОЙЕ ЧТЕНЕОЙ ЪБЗТХЪЛЙ (Л УПЦБМЕОЙА РПЛБ УЙУФЕНБ initng ОЕ РПМХЮЙМБ ПУПВПЗП ТБУРТПУФТБОЕОЙС — ПОБ ОЕ ЙУРПМШЪХЕФУС ОЙ Ч ПДОПН УПЧТЕНЕООПН ДЙУФТЙВХФЙЧЕ).

3) уЙУФЕНБ ЙОЙГЙБМЙЪБГЙЙ upstart

уЙУФЕНБ ЙОЙГЙБМЙЪБГЙЙ upstart ВЩМБ ТБЪТБВПФБОБ уЛПФПН дЦЕКНУПН тЕНОБОФПН (Scott James Remnant) ДМС ДЙУФТЙВХФЙЧБ Ubuntu, ПДОБЛП upstart НПЦОП У ХУРЕИПН ЙУРПМШЪПЧБФШ Ч ДТХЗЙИ ДЙУФТЙВХФЙЧБИ.

Читайте также:  Говорящая тема для windows

3.1. лБЛ ТБВПФБЕФ upstart
ч upstart ЕУФШ УПВУФЧЕООЩК РТПГЕУУ init, ЛПФПТЩК ЪБРХУЛБЕФУС РТЙ ЪБРХУЛЕ УЙУФЕНЩ (БОБМПЗЙЮОП РТoЗТБННБН init Й initng). рТЙ ЪБРХУЛЕ ЗЕОЕТЙТХЕФУС УПВЩФЙЕ startup, РТЙ ЪБЧЕТЫЕОЙЙ ТБВПФЩ — shutdown, РТЙ ОБЦБФЙЙ ОБ Ctrl+Alt+Del — УПВЩФЙЕ ctrl-alt-delete.

чЩ НПЦЕФЕ УПЪДБЧБФШ УПВУФЧЕООЩЕ УПВЩФЙС. чПФ ОЕВПМШЫПК РТЙНЕТ УПЪДБОЙС УПВЩФЙС my_event:
on my_event
eИЕУ echo event received
console output

рТЙ РПМХЮЕОЙЙ ЬФПЗП УПВЩФЙС ОБ ЛПОУПМШ ВХДЕФ ЧЩЧЕДЕОП УППВЭЕОЙЕ:
event received

жБКМЩ УПВЩФЙК ИТБОСФУС Ч ЛБФБМПЗЕ /etc/event.d. уПЪДБКФЕ Ч ЬФПН ЛБФБМПЗЕ ЖБКМ У ЙНЕОЕН my_event Й РПНЕУФЙФЕ Ч ОЕЗП РТЙЧЕДЕООЩК ЛПД. рПУМЕ ЬФПЗП ЧЩЪЧБФШ УПВЩФЙЕ НПЦОП ЛПНБОДПК:
initctl emit my_event

вПМЕЕ РПДТПВОХА ЙОЖПТНБГЙА ПВ ЬФПК ЛПНБОДЕ НПЦОП РТПЮЙФБФШ ОБ УФТБОЙГЕ ТХЛПЧПДУФЧБ: man initctl.

3.2. лПОЖЙЗХТБГЙПООЩЕ ЖБКМЩ upstart
йУУМЕДХКФЕ УПДЕТЦЙНПЕ ЛБФБМПЗБ /etc/event.d. ч ОЕН ЧЩ ОБКДЕФЕ ЖБКМЩ УПВЩФЙК РЕТЕИПДБ ОБ ПРТЕДЕМЕООЩК ЪБРХУЛ.

уБНПЕ ЙОФЕТЕУОПЕ Ч upstart — ХТПЧОЙ ЪБРХУЛБ ЪДЕУШ — ЧЙТФХБМШОЩЕ. ч upstart, ВМБЗПДБТС УПВЩФЙКОП-ПТЙЕОФЙТПЧБООПНХ ТЕЦЙНХ, ЧППВЭЕ ПФРБДБЕФ ОЕПВИПДЙНПУФШ Ч ХТПЧОСИ ЪБРХУЛБ, РПДПВОЩИ ФЕН, ЛПФПТЩЕ ЙУРПМШЪПЧБМЙУШ Ч init. ъБЗТХЪЛБ ФПЗП ЙМЙ ЙОПЗП УЕТЧЙУБ РТПЙУИПДЙФ РТЙ ОБМЙЮЙЙ ОХЦОПЗП БРРБТБФОПЗП ПВЕУРЕЮЕОЙС: ОЕФ ХУФТПКУФЧБ — ОЕ ВХДЕФ ЪБЗТХЦЕО Й УЕТЧЙУ, ФТЕВХАЭЙК ЕЗП.

Upstart НПЦОП ЙУРПМШЪПЧБФШ Ч ТЕЦЙНЕ «ЗПТСЮЕК ЪБНЕОЩ» — ЕУМЙ ЧЩ Ч РТПГЕУУЕ ТБВПФЩ УЙУФЕНЩ РПДЛМАЮЙФЕ ЛБЛПЕ-ФП ХУФТПКУФЧП, ОБРТЙНЕТ, PCMCIA-ЛБТФХ ЙМЙ USB-ХУФТПКУФЧП, ВХДЕФ УЗЕОЕТЙТПЧБОП УППФЧЕФУФЧХАЭЕЕ УПВЩФЙЕ. рПУМЕ ЬФПЗП ВХДХФ ЪБРХЭЕОЩ ЧУЕ ОЕПВИПДЙНЩЕ ДМС ПВЕУРЕЮЕОЙС ТБВПФЩ ЬФПЗП ХУФТПКУФЧБ РТПГЕУУЩ. фБЛ, РТЙ РПДЛМАЮЕОЙЙ УЕФЕЧПК ЛБТФЩ PCMCIA ВХДЕФ УЗЕОЕТЙТПЧБОП УПВЩФЙЕ network-interface-added, ЛПФПТПЕ ЪБРХУФЙФ РТПГЕУУ ОБУФТПКЛЙ УЕФЕЧПК ЛБТФЩ РП DHCP, РТЙ ЬФПН ВХДЕФ УЗЕОЕТЙТПЧБОП ОПЧПЕ УПВЩФЙЕ — network-interface-up Й Ф.Д. еУФЕУФЧЕООП, ЕУМЙ ОЕФ УЕФЕЧЩИ ХУФТПКУФЧ, ФП Й УППФЧЕФУФЧХАЭЙЕ ЙН УПВЩФЙС ОЕ ВХДХФ ЗЕОЕТЙТПЧБФШУС.

Источник

linux-notes.org

Иногда интересно какая же инициализация используется на сервере и в моей статье «Система инициализации в Unix/Linux» я расскажу как можно узнать какая система инициализации используется на сервере.

Основные системы инициализации:

  • sysvinit — Стиль SysVinit существовал еще со времен SystemV, которая была разработана еще в 1983 году. Это установило стандарт инициализации POSIX систем.
  • upstart — система инициализации ОС, которая управляет запуском демонов в течение загрузки системы, их остановку, а также управляет ими во время работы системы. Первоначально была разработана для дистрибутива Ubuntu, но затем стала использоваться и в других дистрибутивах Linux, например в Fedora (впоследствии была заменена systemd), как замена UNIX System V init.
  • systemd — это системный менеджер, (демон для инициализации других демонов в Linux), который пришел и почти заменил SysV. Основное отличие — распределенный запуск служб в процессе загрузки системы, что позволяло существенно ускорить запуск операционной системы.
  • launchd — система инциализации системы с открытым исходным кодом, используемая в ОС Mac OS X. Процесс имеет PID 1 и занимается тем, что запускает другие процессы и перезапускает их в случае сбоя, то есть выполняет функции init UNIX и Linux (в новых версиях Linux осуществляется переход на systemd).

Команды по системам инициализации в Unix/Linux ОС:

Система инициализации в Unix/Linux

Существует несколько способов проверить это, сейчас я покажу как это сделать.

-=== СПОСОБ 1 — проверка PID процессов==-

Например, Ubuntu до версии 14 использовала систему инициализацию Upstart чтобы проверить это, выполните:

Например, Ubuntu 16 и CentOS 7 использовала систему инициализацию SystemD чтобы проверить это, выполните:

Или если используется Ubuntu 16, можно выполнить:

Или, другой пример:

Или (если чтобы было красиво):

Например, CentOS 6 использовала систему инициализацию Upstart, но с init процессом и чтобы проверить это, выполните:

-=== СПОСОБ 2 — проверка файлов==-

Запускаем следующую команду:

Если на сервере используется init инициализация, то она отобразится при выводе. В противном случае — скажет что такой команды нет.

ИЛИ, можно выполнить:

Вот вам еще довольно стоящий пример:

-=== СПОСОБ 3 — с помощью ФС==-

Можно запустить следующую команду:

Команда что выше, проверяет exe симлинку в папке /proc/1. А собственно «1» – это PID 1-го процесса.

-=== СПОСОБ 4 — с помощью готового bash скрипта==-

И прописываем в него:

Можно добавить прав на исполнение:

И для запуска, юзаем:

-=== СПОСОБ 5 — с помощью пакетного менеджера==-

Если используете centOS/RedHat/Fedora/Suse, то можно выполнить:

Если используете Debian/Ubuntu/Mint/др, то можно выполнить:

-=== СПОСОБ 6 — с помощью lsof==-

Так же, можно выполнить:

-=== СПОСОБ 7 — с помощью ls и which==-

Читайте также:  Установить vs code linux mint

Вот и все. Если имеются другие примеры проверки инициализации, пишите в комментариях. Тема «Система инициализации в Unix/Linux» завершена.

Добавить комментарий Отменить ответ

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Источник

Системы инициализации Unix и Linux после SysV

До середины 2000-х никому в голову не приходило менять sysvinit, почти никому. Gentoo с самого начала создавала и развивала OpenRC. Все изменилось с появлением launchd в Mac OS X. Разработчики Ubuntu бросились создавать Upstart, в котором были позаимствованы некоторые идеи из launchd . Дело шло ни шатко ни валко, но тут случился systemd и смешал все карты. Но кто же был истинным первопроходцем?

Daniel J. Bernstein математик и специалист по криптографии, автор популярного MTA qmail и множества других менее известных программ, среди которых выделяется daemontools. Для множества современных систем инициализации daemontools являлся примером и вдохновителем. Прошу внутрь для того, чтобы познакомиться с самой элегантной, простой и влиятельной системой управления службами в Unix / Linux.

DJB и Daemontools

Уравнения Максвелла для управления процессами на Unix ОС.

Внимание — не следует путать daemontools написанный DJB с программой-тезкой DAEMON Tools для монтирования iso образов и создания виртуальных CD/DVD дисков.

Daniel J. Bernstein создал свою программу в 1997 г. Последний стабильный релиз был в июле 2001 г.

Сейчас, когда в Linux сообществе наблюдается раскол из-за systemd, самое время вспомнить каким может быть настоящий инит в духе принципов и философии Unix. В этом смысле дзен-программист DJB является воплощением минимализма и простоты, а бритва Оккама у него встроена в клавиатуру. Его решения основательны и элегантны, на этом фундаменте он строит надежное, безопасное ПО, которое потребляет минимальное количество ресурсов ОС. Вот некоторые особенности его стиля работы.

  • Самый большой файс исходного кода multilog.c имеет всего лишь 13898, нет не строк, а байтов. Команда wc указывает лишь на 617 строк кода.
  • Большинство функций имеют меньше 30 строк.
  • Принцип — никогда ничего не парсить.
  • Принцип — использовать все, что дает ОС и не изобретать велосипеды.

Почему такие странные принципы, и еще с учетом того, что автор исповедует их фанатично? Строительный материал daemontools — директории, процессы, FIFO, исполняемые файлы. Это дает массу преимуществ в разработке и отладке приложения:

  • Тестировать запуск службы проще простого — если запустится исполняемый файл ./run , то и служба тоже запустится.
  • Можно использовать любой язык программирования, не только Bash. Сгодится даже скомпилированный бинарник.
  • Понятно, что и как делает программа даже без подробного прочтения документации и изучения исходного кода.
  • Парсить разнообразные текстовые структуры — на удивление трудная задача, если это делать по уму. Автор избегает этого, умело используя иерархическое свойство файловой системы Unix для воссоздания структуры переменных среды ключ=значение .

Сравнительная таблица DT

Стоит обратить внимание на неортодоксальную структуру директорий daemontools, ничтоже сумняшеся программа создает каталоги в корне файловой системы Unix. DJB прописал в коде программы директории /service , /command и рекомендует создать /package для исходников программы. Это считается весьма дурным тоном в Unix и Linux, создатели дистрибутивов всеми силами избегают этого, также как и пользователи с правами root.

features inittab ttys init.d rc.local /service
Easy service installation and removal No No Yes No Yes
Easy first-time service startup No No No No Yes
Reliable restarts Yes Yes No No Yes
Easy, reliable signalling No No No No Yes
Clean process state Yes Yes No No Yes
Portability No No No No Yes

Давайте пробежимся по таблице самовосхваления daemontools. Начнем с первой строчки. Действительно создание и удаление нового сервиса проще простого, добавил, или удалил новую директорию в /service вместе с файлом ./run и на этом все. Сравните со скриптами sysvinit и остальных инитов, чтобы оценить простоту такого способа достичь того же самого.

Второй пункт менее убедителен в том смысле, что конечно же проще когда сервис и в первый раз стартует автоматически, но в остальных системах инициализации и управления службами достаточно одной команды для первого старта службы.

Возможность перезапустить завершившийся сервис в автоматическом режиме была на тот момент момент большим шагом вперед. На сегодняшний день это уже в порядке вещей.

Четвертая позиция — сигналы. Команда svc , как показано ниже, позволяет послать службе практически любой сигнал POSIX стандартов.

Последние две позиции кажутся несколько надуманными, не совсем понятно как daemontools восстанавливает состояние процесса в отличие от остальных инитов. Непонятно также, почему автор только свою программу считает переносимой на другие платформы.

Структура DT

По словам автора: daemontools — это набор инструментов для управления службами UNIX. Основными отличиями от традиционных инитов (структуры директорий rcX.d, rc.d, rc.local и пр.) является способность перезапустить сервис в случае его падения и наличие программы ведения и ротации логов — multilog. Также, multilog позволяет вести лог вывода программ, не умеющих перенаправлять вывод в syslog . Таким образом, можно запускать как сервис программы, для этого вовсе не предназначенные.

Внутреннее устройство daemontools, граница обведена красной прерывистой линией.

Теперь немного о принципах работы программы.

В самом начале системный инит запускает svscanboot , который затем запускает программу svscan в ново-созданной директории svscan . Далее svscanboot перенаправляет вывод запущенного svscan в отладочный процесс readproctitle .

Ядром daemontools являются всего две программы: svscan и supervise . Первая запускается с единственным аргументом по выбору, а вторая — с обязательным ключом.

Svscan служит для запуска и слежения за сервисами. Каждые 5 секунд Svscan проверяет каталог /service , если другой не задан, на наличие новых подкаталогов. Если такие будут обнаружены, запускается новая копия supervise для каждого каталога.

Supervise является, в соответствии с названием, контролирующем процессом. Он вызывается с параметром, в котором содержится имя каталога и в нем ищет скрипт ./run , который и запускает. Если по каким-то причинам ./run перестал исполняться, то тогда supervise его перезапустит после небольшой паузы — чтобы не создавать дополнительной нагрузки на ОС. Supervise не перезапустит ./run , если в каталоге будет обнаружен файл ./down . Supervise создает в каталоге сервиса подкаталог ./supervise , в котором хранятся данные о процессе. Эти данные могут быть прочитаны с помощью утилиты svstat . Для управления сервисом служит программа svc .

Синтаксис команды svc и опции представлены ниже.

  • -u: Up, запустить сервис, в случае останова — перезапустить.
  • -d: Down, остановить сервис.
  • -t: Terminate, посылает сервису сигнал TERM.
  • -k: Kill, посылает сервису сигнал KILL.
  • -p: Pause, посылает сервису сигнал STOP.
  • -c: Continue, посылает сервису сигнал CONT.
  • -h: Hangup, посылает сервису сигнал HUP.
  • -a: Alarm, посылает сервису сигнал ALRM.
  • -h: Interrupt, посылает сервису сигнал INT.
  • -x: Exit, supervise завершит работу как только ./run или его потомок завершится.
  • -o: Once, запустить сервис, но не перезапускать после его завершения.

Есть еще одно обстоятельство, если в рабочем каталоге supervise содержится подкаталог ./log , в котором есть ./log/run , то тогда будет запущена еще одна копия supervise и создан канал между ./run и ./log/run .

Попробуем добавить сервис sshd.

В таком случае структура директорий может выглядеть так.

После того, как svscan пробежится по этому списку мы получим дерево процессов, в котором процессы service следят за сервисами и логированием.

Зависимости между службами

Несмотря на то, что программа не поддерживает зависимости между различными службами, есть способ добиться учета зависимостей, используя для этого svok следующим образом.

  • svok — проверяет, запущена ли определенная служба. Ничего не выводит в stdout и stderr , если служба запущена, то тогда программа возвращает код 0, в противном случае — код 100.

В данном примере программа на python запустится только в том случае, если стартовал postgres, если же последний пока не поднялся, скрипт завершится и затем через определенно время svscan его перезапустит. Когда же postgres наконец поднимется, python запустит веб приложение.

Квотирование сервиса

С помощью утилиты softlimit можно ограничить предоставленные данному сервису ресурсы.

  • softlimit — запускает программу с ресурсными ограничениями.

Логирование

Если у вас есть некая программа foo , которая не ведет логов, вы без труда сделаете это с помощью multilog , собрав в отдельном файле вывод stdout и stderr с временными метками.

Из другого терминала запускаем:

Последователи daemontools

Мало кто сегодня использует DT, но можно смело сказать, что Daniel J. Bernstein стал для многих примером, а дело его живет и здравствует. Вот неполный список его последователей.

  • daemontools-encore — Разработчик Bruce Guenter, является дальнейшим развитием DT. Не полноценный инит, также как и оригинал.
  • runit — Разработчик Gerrit Pape, умеет параллельно запускать службы. Хабрапост.
  • s6 — Полноценный асинхронный инит с PID 1.
  • nosh — Легковесный гипервизор процессов для BSD и Linux, умеет параллельно запускать и останавливать службы.

Источник

Читайте также:  Lower latency windows 10
Оцените статью