Comprobar periódicamente si es necesario reiniciar un proceso con Crontab y Perl
Frecuentes
Visto 589 veces
6
Escribí un script simple en perl para verificar si mi servidor se está ejecutando. Si no es así, el script lo iniciará de nuevo. Este es el guión:
#!/usr/bin/perl -w
use strict;
use warnings;
my($command, $name) = ("/full_path_to/my_server", "my_server");
if (`pidof $name`){
print "Process is running!\n";
}
else{
`$command &`;
}
Los scripts funcionan perfectamente cuando lo ejecuto manualmente, pero cuando lo ejecuto en crontab no encuentra las bibliotecas dinámicas que usa el servidor, que están en la misma carpeta.
Entrada crontab:
*/5 * * * * /usr/bin/perl -w /full_path_to_script/autostartServer
Supongo que es un problema del contexto donde se lanza la aplicación. ¿Cuál es la forma inteligente de resolver esto?
1 Respuestas
5
Una solución simple es eliminar la ruta completa en el comando y hacer un "cd/ruta" antes de ejecutar el comando. De esta forma se lanzará en la misma carpeta que las bibliotecas. El código se vería así:
#!/usr/bin/perl -w
use strict;
use warnings;
my($command, $name) = ("./my_server", "my_server");
if (`pidof $name`)
{
print "Process is running!\n";
}
else
{
`cd /full_path_to`;
`$command &`;
}
Respondido el 03 de diciembre de 13 a las 13:12
Probablemente deberías usar chdir
y exec
. - Brad Gilbert
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas perl unix process crontab or haz tu propia pregunta.
Tal vez considere ponerlo en inittab para que vuelva a aparecer automáticamente. - Mark Setchell
Verifique el bloqueo de archivos exclusivo sin bloqueo; no depende de comandos externos y es portable. - mpapec
En lugar de reinventar la rueda con su propio observador de procesos, debería echar un vistazo a uno de los existentes que resuelven todos los casos extremos de procesos colgantes como systemd, runit, daemontools, god, monit, ... Hoy en día, su distribución debería enviar con al menos uno de esos (e incluso podría usarlo de forma predeterminada). - Holger Just