나는 cgi 페이지에서 생성되어 자체적으로 실행되는 데몬 프로세스가되는 perl 스크립트를 가지고 있습니다. 사용중인 모듈에서 호출 된 다이가 있으면 스크립트가 eval 블록에서 처리되었지만 호출됩니다. 그러나 명령 프롬프트에서 스크립트를 실행하면 모든 것이 잘되고 오류가 처리됩니다.perl cgi에서 다이가 작동하지 않음
참고 : 명령 줄에서 스크립트가 데몬을지고
나는 cgi 페이지에서 생성되어 자체적으로 실행되는 데몬 프로세스가되는 perl 스크립트를 가지고 있습니다. 사용중인 모듈에서 호출 된 다이가 있으면 스크립트가 eval 블록에서 처리되었지만 호출됩니다. 그러나 명령 프롬프트에서 스크립트를 실행하면 모든 것이 잘되고 오류가 처리됩니다.perl cgi에서 다이가 작동하지 않음
참고 : 명령 줄에서 스크립트가 데몬을지고
죄송합니다, 여기 진짜 대답은 없지만, 조사 할 몇 가지 ...
당신이 mod_perl을에서 작업을 산란하는 경우 평소보다 더 복잡한 것을 기억하십시오. 당신은 파일 기술자를 닫을 필요가있다. httpd/mod_perl은 단지 0, 1, 그리고 2 개 이상의 것을 가지고있을 것이다. 우리는 0에서 255까지 막힌 루프를 작성하지 못했습니다. 또한 stdout
은 메모리에서 1이 아닙니다.
하지만 왜 eval이 작동하지 않을지 확실하지 않습니다. exec
을 사용하여 스크립트를 생성하고 있습니까? 어떤 경우에는 쉘에서 실행하는 것과 동일해야합니다. "죽을 때"라고 말하면 죽을 때 scirpt가 종료되는 것입니다 (평가가없는 것처럼). 또는 다른 것. 다른 것이 있다면 mod_perl이 실행중인 httpd 프로세스에서 신호 핸들러를 상속받을 수 있습니까?
stdin, stdout 및 stderr은 각각 파일 설명자 0, 1 및 2입니다. –
시스템 호출을 사용하여 CGI에서 스크립트를 호출합니다. 시스템 ("script_to_daemonize"); 스크립트에서 나는 그것을 daemonized했습니다 : my $ pid; if ($ pid = fork()) { exit 0; } fatal ("포크 할 수 없습니다! : $!") $ pid가 정의되지 않은 한; ## 독립 세션을 설정하려고 시도했습니다 setsid()! = -1 또는 치명적인 ("could not setsid() : $! \ n"); $ pid = fork 및 exit; fatal ("fork 할 수 없습니다! : $!") $ pid가 정의되지 않은 한; – Kallol
괜찮아 보이는군요, 미안, 당신 문제가 뭔지 전혀 몰랐습니다. – Sodved
수정 : 사용중인 모듈에서 호출 된 다이가 있으면 스크립트가 eval 블록에서 처리되었지만 죽어 가고 있습니다. – Kallol