Re: как демонизировать программу?
Denis Feklushkin -> debian-russian@lists.debian.org @ Thu, 11 Feb 2010 01:06:38 +0700:
>> > > Есть клон: runit (http://smarden.org/runit/,естьврепе;). Мне
>> > > кажется более удобным.
>> > >
>> > > ИМХО, daemontools и runit -- наиболее подходящие решения.
>> >
>> > Поддерживаю. Активно использую в продакшене, очень удобно -
>> > возможность для пользователей запускать собственный экземпляр
>> > супервизора (с правами пользователя) решает множество проблем,
>> > в т.ч. безопасности (рутовые права теперь не нужны).
>>
>> Это про какую из предложенных?
>>
>> У меня на daemontools вот проблема вылезла какая - в лог не пишется
>> весь STDIN, сгенерированный сервисом, только часть.
>>
DF> Проблема оказалась такая.
DF> "Демон" написан на питоне и вызывает другие программы вот таким кодом внутри себя:
DF> p = Popen( res[1], shell = True, stdin=PIPE )
DF> p.stdin.write( res[2] )
DF> p.stdin.close()
DF> p.wait()
DF> если этот код закомментировать то всё ок и такой код в ./run
DF> отлично с ним работает:
DF> =========
DF> $ cat /etc/service/dhcs-daemon/run
DF> #!/bin/sh
DF> set -ex
DF> exec 2>&1
DF> exec chpst -v -u dhcs-daemon /opt/dhcs/queue-daemon.py "dbname=dhcs-new" "5"
DF> =========
DF> если же приведённый вначале питоновский код оставить то после exec
DF> (он заменяет shell на свои аргументы, да?) питоновый stdin теряется
DF> неизвестно где и не попадает в логи
DF> причём, если запустить exec /etc/service/dhcs-daemon/run в консоли
DF> то ничего не теряется, полный вывод питона наблюдается в консоли и
DF> вывод этот идёт в дескриптор stdout
DF> питон на помойку?
Или так. А вообще, вероятно, достаточно объяснить автору скрипта, что
между выводом в stdout и exec иногда нехило бы сделать flush...
Заодно и сам узнаешь.
--
Правки Белявского, сделанные им в рабочей копии головы
-- Из коммитлога.
Reply to: