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

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: