변경 시 mod_fcgid에서 실행 중인 Perl 스크립트를 다시 시작하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com//questions/9675286

  •  12-12-2019
  •  | 
  •  

문제

저는 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 목적?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top