elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Sistemas Operativos
| |-+  GNU/Linux (Moderador: MinusFour)
| | |-+  Cron o Apache frenan la ejecucion de mi script php ?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Cron o Apache frenan la ejecucion de mi script php ?  (Leído 5,012 veces)
Diabliyo


Desconectado Desconectado

Mensajes: 1.441


shell# _


Ver Perfil WWW
Cron o Apache frenan la ejecucion de mi script php ?
« en: 15 Abril 2011, 17:20 pm »

Que tal.

Tengo un servidor dedicado el cual se encarga de enviar a eso de las 3:00 a.m. (madrugada) un aproximado de 2,500 reportes via correo electronico a los trabajadores de varias plantas (empresas), estos reportes se envian a dichas horas para cuando estos lleguen en la ma~ana, tengan los datos actualizados del proceso que se finalizo el dia anterior.

Al principio se empezo enviando una taza de 500 reportes y todo funcionaba perfectamente, la taza se fue aumentando hasta llegar a 2,500 envios y es cuando empezo el problema :(, empece a recivir quejas de que no llegaba el reporte asi que empeze a investigar y les cuento:

El servidor dedicado diariamente ejecuta un script PHP mediante cron, y noto que ahora ya no se se ejecuta completamente, vaya, verifique si el problema era el código (verifique el LOG de apache) y no se muestra ningún error de sintaxis en el script, después mire si por alguna razón los tiempos de ejecución del script estaban mal configurados en el php.ini, teniendo estos valores:

Código
  1. // phpinfo()
  2. max_execution_time = 86400  // para 24 horas
  3. max_file_uploads = 20
  4. max_input_time = 86400 // para 24 horas
  5. memory_limit = 128M
  6. post_max_size = 1024M // 1GB
  7. upload_max_filesize = 2G

Y la forma de como ejecuto el scrtip en cron es asi:

Código:
curl -u user:password http://localhost/script.php?op=start

Cual creen que sea el problema ?...


En línea

el-brujo
ehn
***
Desconectado Desconectado

Mensajes: 21.641


La libertad no se suplica, se conquista


Ver Perfil WWW
Re: Cron o Apache frenan la ejecucion de mi script php ?
« Respuesta #1 en: 15 Abril 2011, 17:42 pm »

tendrás que hacerlo por partes mejor para evitar problemas.

Aunque el max_execution_time es muy alto, quizás el apache mata el proceso si está tanto rato, no lo sé.

Los envíos masivos de e-mail son un problema...
 
Checkea que los e-mails estén en el la cola de salida de tu servidor de correo, es decir que el script del php acabe correctamente. ¿Qué servidor de correo usas?

El cron yo lo ejecutaría sin pasar por apache, sin usar wget, ni curl, directamente usando el binario de php que es mucho más rápido y consume menos recursos:

Código:
/usr/local/bin/php /path/script.php?op=start


En línea

Diabliyo


Desconectado Desconectado

Mensajes: 1.441


shell# _


Ver Perfil WWW
Re: Cron o Apache frenan la ejecucion de mi script php ?
« Respuesta #2 en: 15 Abril 2011, 18:39 pm »

tendrás que hacerlo por partes mejor para evitar problemas.

Aunque el max_execution_time es muy alto, quizás el apache mata el proceso si está tanto rato, no lo sé.

Los envíos masivos de e-mail son un problema...
 
Checkea que los e-mails estén en el la cola de salida de tu servidor de correo, es decir que el script del php acabe correctamente. ¿Qué servidor de correo usas?

El cron yo lo ejecutaría sin pasar por apache, sin usar wget, ni curl, directamente usando el binario de php que es mucho más rápido y consume menos recursos:

Código:
/usr/local/bin/php /path/script.php?op=start

Y como paso el user y password ??... ya que cuando ejecuto el script le puse user y pass por HTTP, por eso ejecuto asi:

Código:
curl -u user:pass http://localhost/script.php?op=start
En línea

Diabliyo


Desconectado Desconectado

Mensajes: 1.441


shell# _


Ver Perfil WWW
Re: Cron o Apache frenan la ejecucion de mi script php ?
« Respuesta #3 en: 25 Abril 2011, 17:26 pm »

Utilizo GNU/Linux con postfix.
Y para el proceso de envío de mails lo hago desde un script en PHP en donde contabilizo el numero de mails que salen y estos datos los corroboro con la cantidad total que deben salir, y pues desde que creció la necesidad de enviar mas correos empecé a ver que no salían la cantidad total (2,500), que solo salen 1,500 o hasta 2,000, pero por alguna razón da error en la ejecución de mail() (en php) y desde ese momento, mi script finaliza dejando un log del numero de mails que se enviaron y a quienes fueron.

Sera que necesito poner un sleep() entre cada envío ?
Existe la posibilidad de que si envío a la cola de postfix una cantidad X (seria un volumen alto), en el segundo intento de meterle mas cosas a la cola, este de error ?
En línea

madpitbull_99
Colaborador
***
Desconectado Desconectado

Mensajes: 1.911



Ver Perfil WWW
Re: Cron o Apache frenan la ejecucion de mi script php ?
« Respuesta #4 en: 29 Abril 2011, 14:05 pm »

Creo que el problema está en el script PHP.

Has configurado el timeout también en el script PHP? Poniendo al principio del script:
Código:
set_time_limit(0); 

Otra opción es enviar los emails de 1000 en 1000, así tienes más posibilidades de que funcione.

Para envió masivo de correos yo utilizaría PHP-Mailer. Échale un vistazo.

El problema puede estar en que PostFix no da abasto a tantos emails de golpe.

En la página oficial de PostFix hay un documento donde explican como optimizar algunas características:
Postfix Performance Tuning
En línea



«Si quieres la paz prepárate para la guerra» Flavius Vegetius

[Taller]Instalación/Configuración y Teoría de Servicios en Red
Diabliyo


Desconectado Desconectado

Mensajes: 1.441


shell# _


Ver Perfil WWW
Re: Cron o Apache frenan la ejecucion de mi script php ?
« Respuesta #5 en: 29 Abril 2011, 15:11 pm »

Creo que el problema está en el script PHP.

Has configurado el timeout también en el script PHP? Poniendo al principio del script:
Código:
set_time_limit(0); 

No, fijate que ni siquiera menciono set_time_limit dentro del script PHP, ya que (creo yo) si especifico que el tiempo de ejecucion sera de 4 horas (en segundos claro) dentro del php.ini, no veo conveniente poner nuevamente el valor dentro de set_time_limit.... Pero no lo se... debo especificar el set_time_limit en el valor que uso ???.... Debo ponerlo en 0 ??...

Otra opción es enviar los emails de 1000 en 1000, así tienes más posibilidades de que funcione.

No puedo enviar de 1,000 en 1,000... Ya que el sistema simplemente hace un query a la BDD de Usuarios, y segun el numero de usuarios dados de alta para envio de Reporte Diario, es el numero de mails que sacare por dia... Claro, podria implementar que solo salieran mil y despues finalizara el envio... El problema seria primero calcular el tiempo que tarda postfix en enviar los 1,000 mails, para que asi (mediante cron) volver a re-configurar el Cron para que este vuelva a reiniciarse....

El problema de enviar de 1,000 en 1,000, es que en realidad NO TODOS los usuarios de mi BDD estan recibiendo el reporte diario, debido a que es un servicio que se esta liberando paulatinamente, de modo que hay mas de 50,000 trabajadores :S... Imaginate cuantas lineas de cron tendria que programar, pero primero ver el lapso de tardanza de postfix en envio de 1,000 y hacer calculos :S.... Seria mas dificil, y ademas no se contemplarian nuevos trabajadores y la baja de trabajadores :S.

Para envió masivo de correos yo utilizaría PHP-Mailer. Échale un vistazo.

PHP-Mailer tengo entendido brinda una libreria para el envio de mails... Pero en si mi Framework tiene la misma capacidad de PHP-Mailer y ademas otras cuestiones extras, como la incrustacion de imagenes dentro de un mail (sin que aparezcan adjuntados), la opcion de variar si se adjunta o se incrusta un dato, segun lo pida yo mediante argumentos en la funcion.

Gracias por el dato, pero prefiero quedarme con mi Framework, ya que lo conozco de pie a cabeza y cualquier fallo se donde arreglar :D.

El problema puede estar en que PostFix no da abasto a tantos emails de golpe.

En la página oficial de PostFix hay un documento donde explican como optimizar algunas características:
Postfix Performance Tuning

Creo que si podria ser postfix, dejame implemento algunas cositas que dice el tutorial (que no tenia) y hago una prueba de envio ahorita !

Saludos !
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿Cómo logro la ejecución continua de un script?
PHP
Libransser 4 3,375 Último mensaje 19 Abril 2008, 04:12 am
por Libransser
Script siempre en ejecucion
PHP
sonyx_32 1 1,634 Último mensaje 19 Mayo 2008, 22:02 pm
por Azielito
Calcular tiempo de ejecución de un script en PHP
PHP
madpitbull_99 2 3,701 Último mensaje 19 Abril 2011, 18:46 pm
por [u]nsigned
Ejecución de scripts de acunetix muestra error 503 en server apache
Nivel Web
Uruk84 2 3,980 Último mensaje 25 Junio 2011, 10:09 am
por madpitbull_99
Ejecutar Firefox desde cron atraves de un script
GNU/Linux
mmarulanda 2 3,471 Último mensaje 27 Octubre 2017, 04:16 am
por Slava_TZD
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines