Comment redémarrer script Perl en cours d'exécution en vertu de l'mod_fcgid quand il changé?

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

  •  12-12-2019
  •  | 
  •  

Question

Je suis de l'exécution de certains scripts sous FastCGI mod_fcgid, et j'aimerais que ceux de recharger automatiquement à chaque fois que je faire des modifications pour le script.

En vertu de mod_fastcgi, vous pouvez configurer

FastCgiConfig -autoUpdate

de faire exactement cela, mais mod_fcgid n'ont pas une telle option.Quelqu'un a une bonne solution pour cela?

La meilleure chose que j'ai trouvé, c'est:

while (my $cgi = CGI::Fast->new()) {
    processRequest($cgi);
    exit if -M $0 < 0;  # restart if script changed
}

qui sort après la manipulation demande d'une plus.Mais ce n'est pas l'idéal, surtout quand il ya plusieurs instances du script en cours d'exécution, il peut prendre un certain temps avant que toutes les anciennes instances ont eu l'occasion de courir une fois de plus et de sortie.

Si je ne l' exit avant processRequest, l'utilisateur obtient une erreur, donc ça va pas le faire non plus.

Merci d'avance,

– Michael

Était-ce utile?

La solution

La bonne façon de le faire est un peu subtile.Je recommande de regarder Plack::Loader::Redémarrage pour savoir comment faire, ou mieux encore l'adaptation de vous application à exécuter sur Plack et puis il suffit de le lancer avec plackup de l' -r possibilité de charger le redémarrage automatique.L'adaptation de votre application peut être plus facile que vous ne le pensez, peut-être aussi facile que de changer

use CGI::Fast;
while (my $cgi = CGI::Fast->new) {
    processRequest($cgi);
}

pour

use CGI::Emulate::PSGI;
use CGI;

my $app = CGI::Emulate::PSGI->handler(sub {
    my $cgi = CGI->new;
    processRequest($cgi);
});

(la rédaction d'un bon natif PSGI application est encore plus belle, mais cette version vous permet d'économiser de la réécriture de la plupart de votre application).

Autres conseils

Je n'ai pas essayé cela, mais serait Module::Refresh de travail pour votre mod_fcgid fins?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top