LINUX.ORG.RU

systemd — новый подход к инициализации системы

 , , smf, ,


2

2

Lennart Poettering, сотрудник компании Red Hat, представил концепцию принципиально нового механизма управления инициализацией системы — systemd (system daemon), которая вобрала в себя достоинства классического System V init и более современных launchd (Mac OS X), SMF (Solaris) и Upstart (Ubuntu, Fedora), но при этом лишена многих их недостатков. В разработке этого проекта ему помогали сотрудники Red Hat, Novell, IBM, Intel и Nokia.

systemd опирается на современные linux-технологии: cgroups, AutoFS, D-Bus, и при этом совместим с исторически устоявшимися механизмами: init-скриптами, стандартными командами shutdown, poweroff и т.п. Предоставляемый systemd функционал позволяет заменить не только систему инициализации, но и ряд других подсистем, в частности, cron, (x)inetd, xdm/kdm/gdm/..., частично даже SELinux.

Основные идеи, использованные при создании systemd:

  • Контроль над сокетами. Многие демоны, запускаемые при инициализации, взаимодействуют с другими демонами через unix domain и сетевые сокеты, и большинство существующих систем инициализации запускают демона-клиента только после того, как демон-сервер запустится и создаст сокет. Вместо этого, systemd создает сокеты, а затем запускает демонов, передавая им эти сокеты. Даже если демон-клиент запустится быстрее и начнет использовать сокет раньше сервера, ничего страшного не произойдет: его запрос будет буферизован и передан серверу, как только тот сможет его обработать. Такой подход уже используется в Mac OS X (launchd), позволяя этой ОС достигать впечатляющей скорости загрузки.

    Аналогичный принцип используется systemd и при запуске служб, использующих шину D-Bus.

    Кроме того, возможен автоматический запуск служб при обращении к заданным сокетам (см. ниже).

  • Фоновое монтирование. Такие операции, как монтирование, проверка и активация квот файловых систем, занимают весьма значительную долю загрузочного времени. В большинстве современных систем они выполняются последовательно, до запуска всех демонов. systemd же предлагает монтировать не-жизненно-важные ФС только тогда, когда они кому-то понадобятся. Для этого используется механизм AutoFS. Например, многие служебные демоны вовсе не обязаны ждать, пока смонтируется огромный и к тому же зашифрованный /home.

    Разумеется, этот подход неприменим к /, /proc, /sys и т.п.

  • Минимизация числа вспомогательных процессов. В настоящее время значительная часть работ по инициализации производится шелл-скриптами, что приводит к колоссальным времязатратам. В частности, Леннарт пишет:

    On my system the scripts in /etc/init.d call grep at least 77 times. awk is called 92 times, cut 23 and sed 74,

    при этом замечая, что почти каждый такой запуск влечет накладные расходы на поиск библиотек, подгрузку данных интернационализации (i18n) и т.п.

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

  • Отслеживание процессов. В ныне используемых системах инициализации в принципе возможна такая ситуация, когда при неправильном форке процесс может «потеряться». Например, так может произойти с некорректно написанным CGI-приложением, и процесс останется работать даже после остановки веб-сервера.

    Для предотвращения таких ситуаций systemd использует интегрированный в ядро Linux механизм контрольных групп (cgroups). Если приложение не имеет доступа к псевдо-ФС, управляющей работой cgroups, то оно не может самостоятельно покинуть свою группу и «потеряться».

    Также к этой группе задач относится и автоматический перезапуск демонов, перенаправление их stdout/stderr на выбранные TTY или в системный журнал, регистрация всех запусков и остановок служб, и многое другое.

  • Ограничение процессов. systemd предоставляет множество возможностей ограничить или расширить полномочия процессов, контролируя такие параметры, как uid, gid, umask, рабочий и корневой каталоги, класс и приоритет CPU и I/O, наличие доступа на чтение и запись к смонтированным файловым системам и отдельным каталогам и т.п. Также можно использовать возможности по ограничению ресурсов, предоставляемые cgroups.

Базовым элементом systemd являются модули (units), которые связаны между собой и имеют определенный тип. Каждый модуль может требовать для своей работы другие модули, конфликтовать с модулями, запускаться только после или до определенного модуля (директивы конфигурации Requires, Conflicts, Before, After, Wants). Из типов модулей определены:

  • service — обычный демон, поддерживающий операции start, stop, restart, reload. Может быть представлен родным (native) файлом конфигурации systemd или System V init-скриптом.
  • socket. При обращении к сокету генерируется событие, для которого можно настроить обработчик. Например, автоматически запускать определенные службы при обращении к заданному сокету. В этом отношении systemd похож на давно известный (x)inetd, однако при этом поддерживает unix domain сокеты и FIFO.
  • device. Отметив нужные устройства в конфигурации udev, впоследствии можно использовать такие события, как появление и удаление устройства, в качестве событий systemd, назначив на них обработчики. Например, при появлении устройства bluetooth будет запущена соответствующая служба.
  • mount. systemd контролирует все точки монтирования файловых систем. В целях обратной совместимости поддерживается сбор информации о точках монтирования из /etc/fstab.
  • automount. Для помеченных таким образом точек монтирования, монтирование выполняется только при обращении к ним.
  • target. Более гибкий аналог уровней исполнения (runlevels), используемых в System V init. Представляет собой группу служб, объединенных по функциональному назначению. Например, multi-user.target идентичен runlevel 5, а bluetooth.target приводит к инициализации подсистемы bluetooth.
  • snapshot — во многом похож на target. Позволяет «запомнить» существующую конфигурацию units (запущенных служб, открытых сокетов, смонтированных ФС) с тем, чтобы в дальнейшем восстановить это состояние. Позволяет, например, перейти в emergency shell (сейчас это init 1), а затем полностью восстановить набор запущенных служб. Другой пример — выход системы из состояния suspend.

Надо заметить, что systemd отличается от SMF, во-первых, тем, что позволяет оперировать не только зависимостями между службами, но и событиями, например, «готовность устройства» или «обращение к сокету». Во-вторых, systemd использует более простой формат файлов конфигурации (.desktop aka .INI против XML в SMF).

От upstart же systemd отличается более высокой степенью параллелизации, и как следствие, более высокой скоростью загрузки. Например, если демон A требует для работы сокет, открытый демоном B, то upstart сначала запустит демона B, а затем демона A, в то время как systemd создаст сокет сам и запустит обоих демонов одновременно, что занимает примерно в два раза меньше времени. Используемый в upstart принцип, когда ключевыми событиями является лишь запуск и остановка демона, Леннарт и его коллеги считают изначально неэффективным.

Well, the point of the part about Upstart above was to show that the core design of Upstart is flawed, in our opinion. Starting completely from scratch suggests itself if the existing solution appears flawed in its core. However, note that we took a lot of inspiration from Upstart's code-base otherwise.

>>> Подробности

★★★★

Проверено: isden ()
Последнее исправление: isden (всего исправлений: 2)
Ответ на: комментарий от linuxfan

>И мосье, видимо, давно не писал скриптов для /bin/sh — мягко говоря, не самое приятное занятие.

+1. Я недавно пытался хитрым способом 4ре процесса пускать, но плюнул, ибо возни много, надёжность никакая.

legolegs ★★★★★
()
Ответ на: комментарий от linuxfan

>Проблема высосана из пальца, а корни ее следует искать в твоей боязни нативного кода.

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

r ★★★★★
()
Ответ на: комментарий от legolegs

> плюнул, ибо возни много

Этому может быть много причин... «Ну ты понел» (с)

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

>Нет веры этим авторам.

Ну так проверь самостоятельно: делаешь директорию с миллионом файлов и сравниваешь время выполнения find $DIR -print0 | xargs -0n1 rm -f и find $DIR -delete. Разница будет как раз в создании миллиона процессов.

И даже --noscripts ни разу не поставил? «Не верю» (с)

Может и было пару раз — не помню, давно с rpm и бинарными дистрибутивами завязал.

Доктор, вы, походу, не доктор :)

Ну я не знаю, чем можно объяснить паническую боязнь gcc и сегфолтов нативного кода кроме внутреннего психологического барьера, вызванного какой-нибудь травмой падения helloworld'а в фидоре от сырости тамошнего gcc.

linuxfan
()
Ответ на: комментарий от r

>Везде где можно писать программы так чтобы нативного кода не было - лучше их так писать.

Честно говоря, за такой подход к делу, я бы бил кедой по морде и выгонял из профессии. Понаписали скриптового говна, так что теперь нужно минимум 2Gb оперативной памяти, чтоб современный линукс не свопился от комбинации браузер + почтовый клиент + эмелятор терминала + аудиоплеер.

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

linuxfan
()
Ответ на: комментарий от linuxfan

>Честно говоря, за такой подход к делу, я бы бил кедой по морде и выгонял из профессии.

Я только не понял почему ты предложил выше по треду чтобы хвостострелок пускал find - а не привел код на С. Найди себе кед и по морде себе по морде.

2Gb оперативной памяти, чтоб современный линукс не свопился от комбинации браузер + почтовый клиент + эмелятор терминала + аудиоплеер.


Современныый бинарный виндовс требует много меньше. Дада.

Кстати, аргументация, почему не надо нативного кода будет?


Ты лучше найди аргументацию на кой черт он нужен.

В идеальном мире идеальная опенсорсная ОС как и любая программа выглядела бы в виде запускаемых исходных кодов. Что-то не понравилось? Поменял и работаешь.

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




r ★★★★★
()
Ответ на: комментарий от linuxfan

> Ну так проверь самостоятельно: делаешь директорию с миллионом файлов и сравниваешь время выполнения find $DIR -print0 | xargs -0n1 rm -f и find $DIR -delete. Разница будет как раз в создании миллиона процессов.

Эээ... а зачем? Миллион файлов в одном каталоге - это характерно для загрузки системы? Кстати, у ext3 ограничение на ~32k фалов в каталоге.

И даже --noscripts ни разу не поставил? «Не верю» (с)

Может и было пару раз — не помню, давно с rpm и бинарными дистрибутивами завязал.

А, гентушнег... пользуешься portage и что-то имеешь против скриптовых языков?

Ну я не знаю, чем можно объяснить паническую боязнь gcc и сегфолтов нативного кода кроме внутреннего психологического барьера

Да я и сам бы затруднился такое диагностировать... но никогда не встречал такого.

Понаписали скриптового говна, так что теперь нужно минимум 2Gb оперативной памяти, чтоб современный линукс не свопился от комбинации браузер + почтовый клиент + эмелятор терминала + аудиоплеер.

Не преувеличивай:

Mem: 1962516k total, 1910356k used, 52160k free, 24704k buffers

Swap: 2650684k total, 68k used, 2650616k free, 1224340k cached

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Не, насчет ограничения соврал - 32k подкаталогов в каталоге.

tailgunner ★★★★★
()

КГ/АМ

Кстати, совсем забыл высказать отношение к сабжевому событию: креатив гениален, а вот автор подкачал (тоже на «м», но не «молодец»)

linuxfan
()
Ответ на: комментарий от tailgunner

> Из того, что большинству сервисов не требуется ничего сложнее exec и kill, следует то, что накладные расходы bash на этих сервисах близки к нулю, и никакой JIT их не ускорит.

Ответ - нет. Ещё раз, медленнее. Даже для сервисов, которые «просто запускаются», навернута (F13b для определённости) обвязка в виде проверок, надо или нет запускать, всякое last-minute конфигурирование и прочее. На остановке те же действия выполняются в обратном порядке.

Решение, запускать ли скрипт, принимается при конфигурировании ранлевела. Потом скрипт проверяет конфигурацию системы и может отказаться запускать демона

А где подпись Капитана? Ну и, эта, в связи с введением (Сюзей, кажется, Дебианом и, наверное, ещё кем-то) межсервисных зависимостей при insserv'е возникает цепочка связанных с этим действий. Но да, это можно назвать «настройкой ранлевела». Глянь как-нить, познавательно.

(собственно, проверка - это его главная функция, иначе демона можно пускать из inetd),

Ответ - нет. Запуск из-под (классического) суперсервера возможен только там, где либо время подъёма сервиса невелико, либо допустимо ожидание. В общем случае это никак не связано с темой дискуссии, а больше про характеристики того или иного сервиса.

Пример Убунты (и, вероятно, Генты) наглядно, тыкскыть, демонстрирует, что отказ от legacy существенно ускоряет

То есть в Убунте init-скрипты уже не на shell, а на... чем?

То есть, ты сейчас спорил со мной, не владея предметом? :) You just kinda wasted my precious time/But don't think twice, it's all right...

Да, в upstart'е и initng уже есть свои варианты DSL'ей. В Убунте поддерживаются и классические SysV инитскрипты, но всё, что убунтерам было важно, они уже переточили на новый формат.

Напрасно. Это не клуб благородных джентльменов, а ЛОР.

Ну, не опускаться же мне до вашего уровня ;)

AlexM ★★★★★
()
Ответ на: комментарий от sjinks
vladimir@sjinks:~$ ls -1 /etc/init | wc -l
55
vladimir@sjinks:~$ ls -1 /etc/init.d | wc -l
94

И, замечу, заметная часть из этих 94 файлов из /etc/init.d/ - симлинки на /lib/init/upstart-job.

AlexM ★★★★★
()
Ответ на: комментарий от tailgunner

> Не знаешь, что все эти yum'ы содраны с apt-get.

я бы попросил без этого патентного троллинга.

И кстати, Убунта - самый распространенный Линукс, так что «велосипеды» Дебиана очень широко используются.

И опять же, Убунта, хоть и построена на дебиановской базе, исповедует цели и методы, прямо противоположные тем, что декларируются Дебианом. Общность формата пакетов и циркулирующие патчи не должны смущать... Это всё равно, что сравнивать кисель с картофельными чипсами - основа одна, а результат, знаешь, совсем разный ;)

AlexM ★★★★★
()
Ответ на: комментарий от AlexM

И, замечу, заметная часть из этих 94 файлов из /etc/init.d/ - симлинки на /lib/init/upstart-job

Да, Вы правы, я об этом не подумал :-(

vladimir@sjinks:/etc/init.d$ ls -l | grep -v ^l | wc -l
62

Да, получается 62 традиционных скрипта и 32 апстартовских.

sjinks ★★★
()

sys-apps/openrc

Я скажу вам только одно слово. И это слово - неудачники^Wopenrc

anonymous
()

А когда ed на моно перепишут?!

Pronin ★★★★
()
Ответ на: комментарий от Deleted

> раздел примонтируется сразу при обращении.

А теперь расскажите нам всем, как вы это сделаете? Сначала вы, конечно будете модифицировать ядро, чтобы поймать обращение к той-ФС-что-должна-быть-примонтирована. Затем... Тьфу ты, «затем» уже не нужно, хватит пункта 1. Не расстраивайтесь, через automount сейчас вы этого не сделаете.

да и указать, какие разделы стоит монтировать в фоне, а какие нельзя, тоже (будет?) можно.

Вы уж определитесь, можно будет, или нельзя :-)

Nastishka ★★★★★
()
Ответ на: комментарий от AlexM

>> Как запустить апач строго после мускуля?

Как-как...

/usr/local/sbin/mysqld $MYSQLD_ARGS
...
/usr/local/sbin/apachectl start

PS сейчас фряхи под руками нету, ставить лень, поэтому возможны >непринципиальные вариации :)

Каждый раз вручную???

matimatik
()
Ответ на: комментарий от Solaris10

runit
daemontools

вопрос насколько считать их штатными.

anonymous
()
Ответ на: комментарий от oops_

> максимально разумно это сделано как ни странно во фре.

Непараллельно, нету запа, все через rc.conf, преапы/предауны постапы/постдауны через одно место --> на свалку.

anonymous
()
Ответ на: комментарий от sjinks

> А что *сейчас* мешает писать инит-скрипты на C?

А где написано, что их будут переписывать на C? o-O

ximeric
()
Ответ на: комментарий от runtime

вы правы

я недавно из за желания «больших дядек» из Linux сделать W**$, грешным делом начал поглядывать на BSD... Но потом нашел CRUX, и обрел нирвану...

wgetrc
()
Ответ на: комментарий от r

> И что - по этому поводу сделать вид что данный юскейс не существует?

Что, только последнюю строку удалось прочитать? Вообще-то существует, и в моём сообщении написано, где и как можно оставить.

ximeric
()
Ответ на: комментарий от matimatik

# head /usr/local/etc/rc.d/mysql-server
#!/bin/sh
#
# $FreeBSD: ports/databases/mysql50-server/files/mysql-server.sh.in,v 1.4 2008/07/30 06:11:16 ale Exp $
#
# PROVIDE: mysql
# REQUIRE: LOGIN
# KEYWORD: shutdown

# head /usr/local/etc/rc.d/apache2
#!/bin/sh
#
# $FreeBSD: ports/www/apache20/files/apache2.sh.in,v 1.3 2007/09/18 19:18:09 clement Exp $
#
# PROVIDE: apache2
# REQUIRE: LOGIN cleanvar mysql
# KEYWORD: shutdown

oops_
()
Ответ на: комментарий от AlexM

> PS сейчас фряхи под руками нету, ставить лень, поэтому возможны непринципиальные вариации :)

Очень даже принципиальные. Use PROVIDE:/REQUIRE:
man rc, rc.subr

oops_
()
Ответ на: комментарий от oops_

Ну, пожалуй, метода сравнима с тем, что мы видим на SysV-style скриптах в SuSE и Debian:

/etc/init.d/samba из Lenny

#!/bin/sh

### BEGIN INIT INFO
# Provides: samba
# Required-Start: $network $local_fs $remote_fs
# Required-Stop: $network $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Should-Start: slapd
# Should-Stop: slapd
# Short-Description: start Samba daemons (nmbd and smbd)
### END INIT INFO

Во-первых, это уже не BSD-style init :) Ну и, во-вторых, как показала практика того же Debian и SuSE, порядка в управлении сервисами стало, может быть, и больше, но скорости загрузки сама по себе такая методика не добавляет. Хотя, конечно, я допускаю, что фряшная реализация менее топорная и/или менее параноидальная.

AlexM ★★★★★
()
Ответ на: вы правы от wgetrc

Прошло время... Ковбой Билл так и не бросил курить, а ковбой Джон уже не может обходиться без сигары в заднице.

AlexM ★★★★★
()

так, на всякий случай. в Debian GNU/Linux для скриптов по умолчанию используется dash - легковесный интерпретатор. а то я вижу вы тут все поголовно на bash наезжаете.

exception13 ★★★★★
()
Ответ на: комментарий от AlexM

Этот «не BSD-style» существует со времен 5.x ветки. А про скорость.. кому она нафиг всралась при загрузке при трехмесячном аптайме на десктопе. И да. Фря грузится на порядок быстрее любого линукса.

oops_
()
Ответ на: комментарий от AlexM

> P.S. BSD-lovers, загляните в /usr/local/etc/rc.d . Сильно удивитесь :)

В OpenBSD нет такого ;) И скриптов для запуска локальных демонов тоже. Прописывай в /etc/rc.local и всё.

Кстати, в этой же связи, во FreeBSD достаточно адекватная система описания зависимостей при запуске демонов, как системных, так и локальных.

Lothlorien ★★★
()
Ответ на: комментарий от Lothlorien

> Прописывай в /etc/rc.local и всё.

Ну я там и показывал, как организовать запуск apache после mysql ;)

AlexM ★★★★★
()
Ответ на: комментарий от sjinks

> В данном случае «свобода выбора» - это головня боль мейнтэйнерам - им придется писать/тестировать скрипты подо все системы инициализации. Что не есть удобно.

Отсюда вывод, что должен быть некое атомарное нечто (скрипт, скажем), запускающее и останавливающее демоны, на базе которого и должны строиться системы инициализации.

Захотел последовательно — sysvinit/bsdinit, захотел параллельно — upstart, захотел контролировать каждый чих — systemd тебе в руки.

Хотя в пределах одного дистрибутива маловероятно, что это будет реализовано.

Существующий sysvinit хорош тем, что все его знают. А так начинаем плодить зоопарк решений для запуска демонов, в результате чего уже их разработчики плюнут на всё и будут писать конструкции управления в стиле apachectl, предлагая запихивать старт сервиса в /etc/rc.local

Lothlorien ★★★
()
Ответ на: комментарий от oops_

Ну, и поэтому тоже. Но не только. В RH-like заметно более «индустриальная» и «навёрнутая» система запуска, причём, всё на том же небыстром bash. В Debian'е в качестве /bin/sh по умолчанию dash, если я правильно помню, но развесистость скриптов сравнима с RH. Плюс заметно более навороченные возможности по «системной инициализации» (штатно идёт поддержка cryptosetup, mdadm и прочих прелестей), что не добавляет скорости rc.sysinit'у & Co.

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

AlexM ★★★★★
()
Ответ на: комментарий от oops_

> кому она нафиг всралась при загрузке при трехмесячном аптайме на десктопе.

заметная часть треда про то, что на (домашнем) компе трёхмесячный аптайм противопоказан.

AlexM ★★★★★
()
Ответ на: комментарий от AlexM

Кстати, тот же JIT-компилятор спокойно может вызовы grep|find ловить/преобразовывать во внутренние вызовы, без запуска лишних процессов. И не надо скриптов на С.

queen3 ★★★★★
()
Ответ на: комментарий от oops_

> Этот «не BSD-style» существует со времен 5.x ветки.

Я рад, что разум в итоге восторжествовал даже у фряшников :) Любители опенки, вон, до сих пор в rc.local пишут и считают, что их волосы: 1. есть 2. мягки и 3. шелковисты

AlexM ★★★★★
()
Ответ на: комментарий от queen3

Вызовы grep|find становятся не нужны, как только мы отказываемся от /bin/sh с его прямо скажем убогими средствами текстовой и файловой обработки.

AlexM ★★★★★
()
Ответ на: комментарий от queen3

> Кстати, тот же JIT-компилятор спокойно может вызовы grep|find ловить/преобразовывать во внутренние вызовы, без запуска лишних процессов. И не надо скриптов на С.

:-\ может или преобразует? Мне интересно где нашли того идиота который парсер командной строки выковыривал из означенных утилит, и будет ли он и впредь обновлять его с модификацией этих утилит? Я не буду даже вспоминать заповедь прогриаммиста про дублирование кода.

alx_me ★★☆
()
Ответ на: комментарий от AlexM

Ага, слышал. Гномереестр в init! Я тут придержусь нейтралитета, а то кто-нибудь ещё и xml вспомнит.

alx_me ★★☆
()
Ответ на: комментарий от alx_me

> Но знаете ли вы магию NETLINK?

Для использования транспортерной ленты недостаточно наличя трапсортерной ленты, для ее использования нужен еще и оператор транспортера, который должен будет сидеть в ядре, вести очередь «ожидающих монтирования» запросов ввода-вывода и реагировать на команды из юзерспейса. Это не особо сложно, но и назвать «простой» эту задачу язык уже не поворачивается.

Nastishka ★★★★★
()
Ответ на: комментарий от AlexM

> Вызовы grep|find становятся не нужны, как только мы отказываемся от /bin/sh с его прямо скажем убогими средствами текстовой и файловой обработки.

Ок. У тебя есть замечательный systemd, все конфиги отныне конфиги а не скрипты. Вопрос на засыпку: а ты предусмотрел в своем systemd например возможность сделать такую инструкцию, как { cd /dev/spool && for i in * ; do setup_this_device $i; done; }? Не предусмотрел? Какая жалость! Или предусмотрел через возможность вписать свой скрипт в схему инициализации через специальный враппер? Ну так во втором случае, чем твое решение отличается от классического /etc/rcX.d/*?

no-dashi ★★★★★
()
Ответ на: комментарий от no-dashi

Ну, не у меня, а, скажем, в upstart или initng. Да, такая возможность есть, выше по треду уже показывали скрипт запуска чего-то причудливого.

Ну так во втором случае, чем твое решение отличается от классического /etc/rcX.d/*

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

AlexM ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.