更改后如何重新启动在 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