Denis Feklushkin -> [email protected] @ 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... Заодно и сам узнаешь. -- Правки Белявского, сделанные им в рабочей копии головы -- Из коммитлога. -- To UNSUBSCRIBE, email to [email protected] with a subject of "unsubscribe". Trouble? Contact [email protected]

