Foros del Web » Programación para mayores de 30 ;) » Programación General »

Determinar si un script de perl ya se encuentra en ejecución

Estas en el tema de Determinar si un script de perl ya se encuentra en ejecución en el foro de Programación General en Foros del Web. Que tal a todos buenos días, tengo un pequeño script de perl que se ejecuta cada cinco minutos a traves de un cron y necesito ...
  #1 (permalink)  
Antiguo 30/09/2008, 09:48
 
Fecha de Ingreso: febrero-2007
Mensajes: 3
Antigüedad: 17 años, 2 meses
Puntos: 0
Determinar si un script de perl ya se encuentra en ejecución

Que tal a todos buenos días, tengo un pequeño script de perl que se ejecuta cada cinco minutos a traves de un cron y necesito que previo a ejecutar una serie de acciones se verifique si el mismo script esta ejecucion.

Ya que el cron lo ejecuta cada cinco minutos, puede darse el caso de que las acciones a ejecutar tomen mas de cinco minutos y el script aun se encuentre operando cuando el cron lo ejecute otra ves y necesito que antes de ejecutar de nuevo el script, se finalicen todas las operaciones realizadas por la instancia anterior del mismo script.

Si alguien puede ayudarme con esto, se los voy a agradecer.
  #2 (permalink)  
Antiguo 30/09/2008, 10:45
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 2 meses
Puntos: 90
Respuesta: Determinar si un script de perl ya se encuentra en ejecución

Eso se hace con un archivo de control, si el archivo existe significa que está ejecutándose el proceso, y hasta se suele colocar el ID del proceso en el mismo, por si se desboca hay que matarlo

pasos lógicos del script

1) verificar si el existe el archivo script.pid, de existir devolvemos error, sino seguimos...
2) creamos el archivo script.pid
3) hacemos todas las tareas de tu script, sabiendo que nadie molestará...
4) eliminamos el archivo script.pid

Espero que te sirva...

Saludos
__________________
Esteban Quintana
  #3 (permalink)  
Antiguo 30/09/2008, 11:56
 
Fecha de Ingreso: febrero-2007
Mensajes: 3
Antigüedad: 17 años, 2 meses
Puntos: 0
Respuesta: Determinar si un script de perl ya se encuentra en ejecución

Gracias por tu respuesta monoswim, la solucion es buena y creo que me resuelve el problema.

Ahora bien, me surge otro problema que esta relacionado exactamente con lo que me comentas, que pasa si se queda colgado el proceso, y el script no finaliza por lo cual no borra el archivo de control que el mismo creo (el script.pid), cada ves que el cron ejecute el script este se va a abortar al ver que el archivo de control ya existe, y no se va a ejecutar otra ves.

Creo que estoy siendo demasiado pesimista, pero seria bueno contemplar todo posible fallo del sistema.

De nuevo te agradezco la solucion planteada, voy a implementarla, si se te ocurre algo mas para atacar el segundo problema te lo agradecere.

Saludos.
  #4 (permalink)  
Antiguo 01/10/2008, 11:21
 
Fecha de Ingreso: febrero-2007
Mensajes: 3
Antigüedad: 17 años, 2 meses
Puntos: 0
Respuesta: Determinar si un script de perl ya se encuentra en ejecución

Me dieron otra solución que creo es un poco mas exacta ya que se basa en la busqueda del PID del proceso asignado al script.

@psgre = `pgrep script.pl`;
$j=0;
foreach (@psgre) {
$j++;
}

Se esta ejecutando el comando pgrep que me devolvera el listado de PID asignados a la ejecución del script script.pl, este listado queda en un arreglo @psgre, luego se recorre todo el arreglo haciendo una cuenta, si la cuenta es igual a uno, indicara que solamente este mismo script se esta ejecutando por lo que podemos hacer todo lo necesario, si es mayor a uno, indicaria que el script ya estaba en ejecucion antes de que se ejecutara este y no hacemos nada.


Si alguien encuentra una solución mas exacta, por favor publiquenla, no estaria mal mejorar el script.

Gracias y saludos.
  #5 (permalink)  
Antiguo 01/10/2008, 12:10
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 2 meses
Puntos: 90
Respuesta: Determinar si un script de perl ya se encuentra en ejecución

Está buena la solución, solo sacaría el foreach...con hacer

my $j = @psgre;

quedará en $j la cantidad de elementos que tenga @j

Es forma más corta de contar la cantidad de elementos que tiene un array...

saludos
PD: Gracias por publicar la solución
__________________
Esteban Quintana
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:34.