создаю демона на питоне (проверку ошибок убрал из кода чтоб не
загромождать) так:


переменные:
db_path - путь куда будет chdir демоном сделан
my_script - путь к скрипту который хотим сделать демоном
id_file - путь к файлу куда будет складываться вывод скрипта
par1, par2 - параметры скрипту (это неважно)


# первый раз форкаемся
pid=os.fork()
if pid==0:
        os.chdir(db_path)
        os.setsid()
        pid=os.fork()

        # второй раз форкаемся
        if pid>0:
                sys.exit(0)
        
        # переназначаем потоки
        si=file('/dev/null', 'r')
        so=file(id_file, 'a+', 0)
        
        os.dup2(si.fileno(), sys.stdin.fileno())
        os.dup2(so.fileno(), sys.stdout.fileno())
        os.dup2(so.fileno(), sys.stderr.fileno())

        # пишем в файл свой pid
        print os.getpid()
        sys.stdout.flush()
        sys.stderr.flush()
        
        # дальше работает скрипт
        os.execv(my_script, (my_script, par1, par2))

ну и вот эта программка прекрасно работает на таких скриптах вроде:

#!/bin/sh
while /bin/true; do
        echo $1 $2 `date` stdout
        echo $1 $2 `date` stderr 1>&2
        sleep 1
done

то есть пофиг куда демон-скрипт пишет он все равно в наш файл попадает

а дальше началась заморока если тестовый скрипт написан на perl, то
почему-то его stderr работает, а его stdout в наш лог не выводится:

#!/usr/bin/perl -w
$login = shift;
$password = shift;
while(1) {
        print "$login $password";
        sleep(1);
}

вот от такого скрипта в наш лог попадают только сообщения отладочные
(stderr), а то что print'ами (stdout) не выводится :(

я в перле не силен, я писал cgi обертку для чужого скрипта и не знаю что
делать:
из ком-строки запущенный перловый скрипт все выводит нормально
а из демона - нет

у меня есть предположения что это как-то связано с буфферизацией
выходных потоков интерпретатором perl или чем-то около этого...
но как поправить/выяснить не знаю

помогите разобраться плз!


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Ответить