Re: как демонизировать программу?
On Wed, 10 Feb 2010 20:55:14 +0700
Denis Feklushkin <denis.feklushkin@gmail.com> wrote:
> On Wed, 10 Feb 2010 14:54:49 +0300
> Alexey Pechnikov <pechnikov@mobigroup.ru> wrote:
>
> > Hello!
> >
> > On Wednesday 10 February 2010 10:22:03 Roman S. Gushcha wrote:
> > > Есть клон: runit (http://smarden.org/runit/,естьврепе;). Мне
> > > кажется более удобным.
> > >
> > > ИМХО, daemontools и runit -- наиболее подходящие решения.
> >
> > Поддерживаю. Активно использую в продакшене, очень удобно -
> > возможность для пользователей запускать собственный экземпляр
> > супервизора (с правами пользователя) решает множество проблем,
> > в т.ч. безопасности (рутовые права теперь не нужны).
>
> Это про какую из предложенных?
>
> У меня на daemontools вот проблема вылезла какая - в лог не пишется
> весь STDIN, сгенерированный сервисом, только часть.
>
Проблема оказалась такая.
"Демон" написан на питоне и вызывает другие программы вот таким кодом внутри себя:
p = Popen( res[1], shell = True, stdin=PIPE )
p.stdin.write( res[2] )
p.stdin.close()
p.wait()
если этот код закомментировать то всё ок и такой код в ./run отлично с ним работает:
=========
$ cat /etc/service/dhcs-daemon/run
#!/bin/sh
set -ex
exec 2>&1
exec chpst -v -u dhcs-daemon /opt/dhcs/queue-daemon.py "dbname=dhcs-new" "5"
=========
если же приведённый вначале питоновский код оставить то после exec (он заменяет shell на свои аргументы, да?) питоновый stdin теряется неизвестно где и не попадает в логи
причём, если запустить exec /etc/service/dhcs-daemon/run в консоли то ничего не теряется, полный вывод питона наблюдается в консоли и вывод этот идёт в дескриптор stdout
питон на помойку?
Reply to: