Tengo problemas para realizar un proceso de larga ejecución a partir de algún código que se ejecute en mod_perl2.¿Cómo se tenedor correctamente con mod_perl2?
Todo funciona en su mayor parte, pero parece que el proceso bifurcado mantiene asas abiertas a los archivos de registro de Apache, esto significa que Apache no se reiniciará mientras se ejecuta el proceso (recibo un mensaje de error al abrir archivos de registro) .
Aquí está el código que estoy usando:
use POSIX; # required for setsid
# Do not wait for child processes to complete
$SIG{CHLD} = 'IGNORE';
# fork (and make sure we did!)
defined (my $kid = fork) or die "Cannot fork: $!\n";
if ($kid) {
return (1, $kid);
}else {
# chdir to /, stops the process from preventing an unmount
chdir '/' or die "Can't chdir to /: $!";
# dump our STDIN and STDOUT handles
open STDIN, '/dev/null' or die "Can't read /dev/null: $!";
open STDOUT, '>/dev/null' or die "Can't write to /dev/null: $!";
# redirect for logging
open STDERR, '>', $log_filename or die "Can't write to log: $!";
# Prevent locking to apache process
setsid or die "Can't start a new session: $!";
# execute the command
exec($cmd, @args);
die "Failed to exec";
}
En los días mod_perl1, recuerdo usando $r->cleanup_for_exec
para resolver este problema, pero no parece ser apoyado bajo mod_perl2. (Editar: Apparently ya no es necesario ...)
¡Cualquier consejo sobre cómo iniciar correctamente un proceso de larga duración desde mod_perl2 sin estos problemas sería muy apreciado!
Hola Dan, cómo resolviste este problema, estoy enfrentando el mismo problema. Anteriormente estaba usando mod_perl1 y '$ r-> cleanup_for_exec' funcionaba bien, pero en mod_perl2 esto ya no es necesario, así que ¿podría ayudarme a implementar esto en mod_perl2? Gracias por adelantado. –