URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 6073
[ Назад ]

Исходное сообщение
"как заставить апач не дожидаться выполнения CGI"

Отправлено evger , 11-Ноя-08 16:06 
задача запустить perl скрипт из вебинтерфейса, скрипт работает 5-10 минут.
думал реализовать так:
запускается скрикт, форкается
парент отдает сообщени - ожидайте ..
чайл делает setsid выполняется, пишет свой статус в файл
веб интерфейс раз в 30 секунд делает запрос, читается файл статуса, обновляется статус

проблема в том, что апач висит и ждет пока все процессы завершатся


Содержание

Сообщения в этом обсуждении
"как заставить апач не дожидаться выполнения CGI"
Отправлено Pahanivo , 11-Ноя-08 16:24 
>задача запустить perl скрипт из вебинтерфейса, скрипт работает 5-10 минут.
>думал реализовать так:
>запускается скрикт, форкается
>парент отдает сообщени - ожидайте ..
>чайл делает setsid выполняется, пишет свой статус в файл
>веб интерфейс раз в 30 секунд делает запрос, читается файл статуса, обновляется
>статус
>
>проблема в том, что апач висит и ждет пока все процессы завершатся
>

background не пробовал? )


"как заставить апач не дожидаться выполнения CGI"
Отправлено evger , 11-Ноя-08 16:34 
поясните

"как заставить апач не дожидаться выполнения CGI"
Отправлено Pahanivo , 11-Ноя-08 23:59 
>поясните

из cgi запускать нужный скрипт деманом


"как заставить апач не дожидаться выполнения CGI"
Отправлено angra , 12-Ноя-08 05:19 
Ну все-таки это перл, а не шелл и демонизироваться лучше самостоятельно, что судя по использованию setsid и пытался сделать автор.
Автору я бы посоветовал отладить для начала без апача, а если не получается самостоятельно решить проблему, то нужно показать минимально возможный код, демонстрирующий проблему. Например следующий демонстрационный код спокойно форкается из под апача, родитель выдает сообщение, а потомок демонизируется и живет еще пять минут. Никакие процессы апача при этом не висят.

#!/usr/bin/perl
use strict;
print "Content-type: text/html\n\n";
if (my $pid=fork) {
        print "done: $pid";
        exit;
} else {
        use POSIX qw(setsid);
        open STDIN,  '/dev/null';
        open STDOUT, '>/dev/null';
        open STDERR, '>/dev/null';
        setsid;
        for (1..5) {
                open FH,">fork_test";
                print FH $_;
                close FH;
                sleep(60);
        }
}


"как заставить апач не дожидаться выполнения CGI"
Отправлено Pahanivo , 12-Ноя-08 12:57 
гы ну и пусть perl ) а что теперь запретили cgi скрипты на шеле писать? )



"как заставить апач не дожидаться выполнения CGI"
Отправлено evger , 12-Ноя-08 18:36 
>гы ну и пусть perl ) а что теперь запретили cgi скрипты
>на шеле писать? )

проблема решена, как вцелом и было понятно алгоритм верный проблема в кривых руках.
надо закрывать stdin и stdout
в шеле все работало - он не