[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: "Правильные" демоны - не демоны?



On Thu, Aug 27, 2009 at 11:06:36PM +0400, Alexey Pechnikov wrote:
> Имеем inittab для не-демонов, /etc/init.d/ для демонов всех сортов и inetd.conf
> для сетевых не-демонов - целый зоопарк. Вопрос: зачем нужен режим демонизации 
> в сервисах, если их прекрасно можно и без этого запустить? Далее, зачем нужна 
> встроенная работа с syslog, когда можно передавать в лог stdout & stderr через 
> пайп (связку программы с логирующей утилитой могут обеспечить runit, 
> daemontools, etc., если не хочется вручную перенапрявлять вывод). 

Ты все в кучу свалил. init.d и inittab вообще не решают задачу демонизации.
В обсуждаемом контексте (запуск и управление сервисами) они могут
работать только с процессами, которые _сами_по_себе_ запускаются как
демоны, т.е. без управляющего терминала. Задачи у этих двух систем
разные:

1. inittab обеспечивает постоянную работу демона перезапуская в случае
падения,

2.init.d (sysv-скрипты, хотя в общем и bsd-скрипты) -- это обертка для
того чтобы:
а) иметь общий интерфейс для управления разными демонами
(/etc/init.d/service start|stop|restart|status). В дебе до логического
завершения эту идею пытаются довести разрабатывая слой policy-rc.d, но,
имхо, получается что-то унылое и некрасивое.
б) задать порядок запуска скриптов при инициализации и реализовать
уровни запуска.

runit (и daemontools) решает все эти задачи:

1. обеспечивает общий интерфейс управления службами. не хуже чем init.d
и всяко уж повеселее чем policy-layer, start-stop-daemons etc. (скрипты
запуска куда проще получаются);
2. определяет порядок запуска скриптов. тоже не хуже. изначально
параллельный запуск, простой учет завимостей, порядок запуска не
определяется номерами ссылок, а только зависимости, что, в-общем-то,
true.
3. обеспечивает постоянную работу служб, перезапуская их в случае
падения (чего никак не могут делать скрипты в init.d) без потери
возмоности просто их останавливать (с чем проблемы у inittab).

а также:

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

runit достаточно хорош даже для того, чтобы быть в busybox (и он там
есть).

А вот inetd тут вроде вообще ни при чем. У него своя работа.
 
--- 
С уважением,
Роман Гуща


Reply to: