변경 시 mod_fcgid에서 실행 중인 Perl 스크립트를 다시 시작하는 방법은 무엇입니까?
문제
저는 FastCGI 스크립트를 실행하고 있습니다. mod_fcgid
, 스크립트를 변경할 때마다 자동으로 다시 로드하고 싶습니다.
아래에 mod_fastcgi
, 구성할 수 있습니다
FastCgiConfig -autoUpdate
정확히는 그렇게 하려고 하지만 mod_fcgid
그런 옵션이 없습니다.누구든지 이에 대한 좋은 해결 방법이 있습니까?
내가 생각 해낸 가장 좋은 점은 다음과 같습니다.
while (my $cgi = CGI::Fast->new()) {
processRequest($cgi);
exit if -M $0 < 0; # restart if script changed
}
하나 이상의 요청을 처리한 후 종료됩니다.그러나 이것은 이상적이지 않습니다. 특히 실행 중인 스크립트의 여러 인스턴스가 있는 경우 모든 이전 인스턴스가 한 번 더 실행되고 종료될 기회를 갖기까지 꽤 오랜 시간이 걸릴 수 있습니다.
내가한다면 exit
~ 전에 processRequest
, 사용자에게 오류가 발생하므로 그 중 하나도 수행되지 않습니다.
미리 감사드립니다.
– 마이클
해결책
올바른 방법은 약간 미묘합니다.나는 보는 것이 좋습니다 플랙::로더::재시동기 이를 수행하는 방법 또는 더 나은 방법은 Plack에서 실행되도록 앱을 조정한 다음 plackup으로 실행하는 것입니다. -r
재시작 장치를 자동으로 로드하는 옵션입니다.앱을 조정하는 것은 예상보다 쉬울 수 있으며 변경만큼 쉬울 수도 있습니다.
use CGI::Fast;
while (my $cgi = CGI::Fast->new) {
processRequest($cgi);
}
에게
use CGI::Emulate::PSGI;
use CGI;
my $app = CGI::Emulate::PSGI->handler(sub {
my $cgi = CGI->new;
processRequest($cgi);
});
(적절한 기본 PSGI 앱을 작성하는 것이 훨씬 더 좋지만 이 버전을 사용하면 대부분의 앱을 다시 작성하지 않아도 됩니다.)
다른 팁
나는 이것을 전혀 시도하지 않았지만 Module::Refresh
당신을 위해 일하세요 mod_fcgid
목적?
제휴하지 않습니다 StackOverflow