Foros del Web » Programando para Internet » PHP »

flock() para correr 1 proceso a la vez

Estas en el tema de flock() para correr 1 proceso a la vez en el foro de PHP en Foros del Web. Hola Desde crontab ejecuto un script cada 3 minutos. El proceso busca en una tabla y abre páginas externas usando CURL para controlar cambios, si ...
  #1 (permalink)  
Antiguo 03/10/2008, 14:08
(Desactivado)
 
Fecha de Ingreso: septiembre-2004
Mensajes: 360
Antigüedad: 20 años, 2 meses
Puntos: 1
flock() para correr 1 proceso a la vez

Hola
Desde crontab ejecuto un script cada 3 minutos.
El proceso busca en una tabla y abre páginas externas usando CURL para controlar cambios, si los encuentra envía email al admin y actualiza la tabla.
Parece que cuando el proceso es lento (seguramente cuando la página que abro está lenta) se produce una superposición, es decir, el cron empieza un segundo proceso SIN haber terminado el primero y entonces envía el email con los datos mezclados.
Googleando veo que puedo evitarlo con flock() pero no entiendo cómo hacerlo ni qué significa exactamente.

Alguien tiene idea sobre esto y 1 minuto para ayudarme ?

Aclaro: no puedo definir más tiempo en el cron porque es una tabla con miles de archivos y necesito mínimo 3 min.
  #2 (permalink)  
Antiguo 03/10/2008, 14:12
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: flock() para correr 1 proceso a la vez

Mmm lo que puedes hacer mejor es abrir un archivo de proceso (es un archivo solo donde se especifica que el proceso esta corriendo), y entonces al "levantar" el segundo proceso checas si existe, y si existe no ejecutas el script.

Saludos.
  #3 (permalink)  
Antiguo 03/10/2008, 14:24
(Desactivado)
 
Fecha de Ingreso: septiembre-2004
Mensajes: 360
Antigüedad: 20 años, 2 meses
Puntos: 1
Respuesta: flock() para correr 1 proceso a la vez

Gracias por responderme.
O sea que desde el cron llamaría a ese archivo de proceso ?
o entendí mal ?
  #4 (permalink)  
Antiguo 03/10/2008, 14:30
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: flock() para correr 1 proceso a la vez

No, desde tu archivo PHP, al iniciar compruebas si existe tu archivo de proceso, algo así:
Código php:
Ver original
  1. <?php
  2. $controlFile = "/tmp/myProcess.id";
  3. if(file_exists($controlFile)) { // Existe no iniciar
  4.          die(1);
  5. }
  6.  
  7. touch($controlFile);
  8. // aca todo tu proceso

Saludos.
  #5 (permalink)  
Antiguo 03/10/2008, 14:35
(Desactivado)
 
Fecha de Ingreso: septiembre-2004
Mensajes: 360
Antigüedad: 20 años, 2 meses
Puntos: 1
Respuesta: flock() para correr 1 proceso a la vez

ah, grandioso, muchísimas gracias !
  #6 (permalink)  
Antiguo 03/10/2008, 14:37
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: flock() para correr 1 proceso a la vez

No se te olvide "borrar" el archivo (con unlink()) al final de tu proceso o no se volvera a iniciar.

Saludos.
  #7 (permalink)  
Antiguo 04/10/2008, 12:21
(Desactivado)
 
Fecha de Ingreso: septiembre-2004
Mensajes: 360
Antigüedad: 20 años, 2 meses
Puntos: 1
Respuesta: flock() para correr 1 proceso a la vez

jajaja si te hubiera leído antes !!!!!!!!!!!
Mil gracias, ahora todo trabaja 10 puntos
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 22:11.