Solución al ERROR 500 al ejecutar tarea Cron en Prestashop

mundodigital Seguir

Curioso
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
13 Jun 2013
Mensajes
8
Hola a todos!

Tengo un server KS4G con Debian Squeeze / ISPConfig.

En una instalación de una tienda online con Prestashop tengo que ejecutar una tarea Cron de un script.php para bajar un fichero de productos de un proveedor e importarlo a una base de datos , el problema es que me da el típico ERROR 500: Internal Server Error , mensaje que por lo que parece está directamente relacionado con el "típico timing out" , es decir el limite de ejecución del servidor.

Buscando información he recopilado algunas variables de php.ini que estan relacionadas con este error y he cambiado los siguientes parámetros:

Código PHP:


max_input_time = 180
max_execution_time = 120
memory_limit = 128M

Incluso otros parámetros relacionados con descarga de ficheros

Código PHP:

upload_max_filesize = 32M
post_max_size = 32M
Para probar via ssh ejecuto el script con esta orden :

Código PHP:

wget -O /dev/null http://dominio.com/cron.php
Y al cabo de 5 minutos recibo el mensaje ERROR 500: Internal Server Error

¿ Tenéis alguna idea ?

¿ Cuál es la configuración ideal ?

¿ Que parámetros me aconsejáis modificar para solucionar este problema ?

Un saludo y muchas gracias.
 

OscarS

Épsilon
Verificación en dos pasos activada
Desde
6 Ago 2011
Mensajes
922
Si tienes firewall revisa que no este matando el proceso, el cron se agrega a crond "crontab -e"

Saludos.
 

shadowhck

Lambda
Programador
Verificado por Whatsapp
Desde
18 Ago 2009
Mensajes
2.772
Cuanto mide el archivo de productos?

Podria ser problema de memoria, y no un timeout.

Aunque si el archivo es muy grande, y la conexion es limitada, tardara mucho por causa del tiempo en que tarda la transferencia.
 

mundodigital

Curioso
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
13 Jun 2013
Mensajes
8
Hola compañeros !

El problema ya está resuelto.:) Aquí está la solución.

Siguiendo las recomendaciones de los compañeros de foro fuí a echar un vistazo al log del servidor Apache, en realidad esta fue la primera cosa que debería haber hecho no se por que no se me habia ocurrido antes.

Después de ver el registro de errores (/ var/log/apache2/error.log en Debian Server encontré esto:

PHP:
[warn] [client **.**.**.**] mod_fcgid: read data timeout in 360 seconds 
[error] [client **.**.**.**] Premature end of script headers: cron.php

El problema parece residir en el mod_fcgid.

Excavando en la documentación de Apache 2 para mod_fcgid me enteré de la Directiva FcgidIOTimeoutT

La configuración mod_fcgid son eliminados por host virtual, por lo que sus valores globales no se aplicarán a su host virtual .

Me puse a editar el archivo conf VirtualHost por defecto. En Debian Server, por lo general es /etc/apache2/sites-available/default.

La adición de esta línea dentro del contexto <VirtualHost>:

PHP:
<IfModule mod_fcgid.c> 
   FcgidIOTimeout  7200 
</IfModule>

Reinicie Apache2 y el script funciona ahora. :p7:
 

shadowhck

Lambda
Programador
Verificado por Whatsapp
Desde
18 Ago 2009
Mensajes
2.772
Hola compañeros !

El problema ya está resuelto.:) Aquí está la solución.

Siguiendo las recomendaciones de los compañeros de foro fuí a echar un vistazo al log del servidor Apache, en realidad esta fue la primera cosa que debería haber hecho no se por que no se me habia ocurrido antes.

Después de ver el registro de errores (/ var/log/apache2/error.log en Debian Server encontré esto:

PHP:
[warn] [client **.**.**.**] mod_fcgid: read data timeout in 360 seconds 
[error] [client **.**.**.**] Premature end of script headers: cron.php

El problema parece residir en el mod_fcgid.

Excavando en la documentación de Apache 2 para mod_fcgid me enteré de la Directiva FcgidIOTimeoutT

La configuración mod_fcgid son eliminados por host virtual, por lo que sus valores globales no se aplicarán a su host virtual .

Me puse a editar el archivo conf VirtualHost por defecto. En Debian Server, por lo general es /etc/apache2/sites-available/default.

La adición de esta línea dentro del contexto <VirtualHost>:

PHP:
<IfModule mod_fcgid.c> 
   FcgidIOTimeout  7200 
</IfModule>

Reinicie Apache2 y el script funciona ahora. :p7:

Yo tambien he tenido problemas con Fcgid, uso ISPConfig 3 en Debian 6, y en ocasiones manda errores 500 de la nada, y solo con reiniciar Apache se arregla, mod_php nunca me ha dado problemas de ese tipo, aunque consume un poco mas de memoria.

Te recomiendo reemplazar las directivas desde el mismo panel, en las opciones del sitio existe un textarea llamado "Directivas de Apache
", ahi podrias colocar eso, y asi no perder los cambios al editar tu sitio.
 
Desde
16 Oct 2010
Mensajes
3.090
Yo tambien he tenido problemas con Fcgid, uso ISPConfig 3 en Debian 6, y en ocasiones manda errores 500 de la nada, y solo con reiniciar Apache se arregla, mod_php nunca me ha dado problemas de ese tipo, aunque consume un poco mas de memoria.

Te recomiendo reemplazar las directivas desde el mismo panel, en las opciones del sitio existe un textarea llamado "Directivas de Apache
", ahi podrias colocar eso, y asi no perder los cambios al editar tu sitio.

Usa php-fpm es mejor y más rápido que fcgi, aunque algunos dicen que es lo mismo pero no, en debian va de maravilla y la velocidad increíble, puedes hacerlo andar con nginx en ispconfig :)

En apache también funciona bien.
 
Última edición:

shadowhck

Lambda
Programador
Verificado por Whatsapp
Desde
18 Ago 2009
Mensajes
2.772
Usa php-fpm es mejor y más rápido que fcgi, aunque algunos dicen que es lo mismo pero no, en debian va de maravilla y la velocidad increíble, puedes hacerlo andar con nginx en ispconfig :)

En apache también funciona bien.

Lo que no se, es si necesito cconfiguraciones adicionales, por ejemplo, se que tengo que instalar php5-fpm, y fastcgi, segun lei en un tema, Fcgid no es compatible (HowtoForge Forums | HowtoForge - Linux Howtos and Tutorials - View Single Post - php-fpm with ISPConfig on apache).

Me interesa instalar Nginx, pero no se si sea totalmente compatible con Drupal.

Tendre que probar, y realizar pruebas dentro de unos meses. :distant:
 

OscarS

Épsilon
Verificación en dos pasos activada
Desde
6 Ago 2011
Mensajes
922
Usa php-fpm es mejor y más rápido que fcgi, aunque algunos dicen que es lo mismo pero no, en debian va de maravilla y la velocidad increíble, puedes hacerlo andar con nginx en ispconfig :)

En apache también funciona bien.

Si va a usar nginx y php-fpm es mejor de plano no ponerle panel solo comera recursos para un sistema LEMP. y si PHP-FPM es mejor que fcgi pero fcgi es totalmente compatible con la mayoría de los paneles sin problema y con soporte.


[MENTION=557]shadowhck[/MENTION] nginx es compatible con casi todo y mucho mejor que apache.

Saludos.
 
Desde
16 Oct 2010
Mensajes
3.090
Si va a usar nginx y php-fpm es mejor de plano no ponerle panel solo comera recursos para un sistema LEMP. y si PHP-FPM es mejor que fcgi pero fcgi es totalmente compatible con la mayoría de los paneles sin problema y con soporte.


Enlace eliminado nginx es compatible con casi todo y mucho mejor que apache.

Saludos.

Pues ispconfig no come recursos como mucho 128 mb de ram cuando lo usas y si no lo usas no, y si vas a tener muchas webs no hay por que complicarse, ispconfig con nginx y php-fpm viene de lujo y si quiere usar suphp, DSO, fcgi o lo que quiera en otra web puede usarlo ( no es necesario claro esta pero es para decir lo que facilita la vida ispconfig, 1 clic y tiene otro handler en una web o hasta otra versión de php si quiere, así de potente es ispconfig) no consume recursos, esta todo bien organizado y si tiene 20, 30 o 40 webs es mucho más cómodo con panel, agregar webs, bases de datos, gestionar emails etc

@Enlace eliminado

Si de drupal te preocupan las URLs amigables funcionan a la perfección y si quieres más poder puedes ponerle varnish, aunque si no quieres cambiar a nginx pásate a apache 2.4 con mpm_event verás tremenda mejoría casi casi tan bueno como nginx.
 

shadowhck

Lambda
Programador
Verificado por Whatsapp
Desde
18 Ago 2009
Mensajes
2.772
Pues ispconfig no come recursos como mucho 128 mb de ram cuando lo usas y si no lo usas no, y si vas a tener muchas webs no hay por que complicarse, ispconfig con nginx y php-fpm viene de lujo y si quiere usar suphp, DSO, fcgi o lo que quiera en otra web puede usarlo ( no es necesario claro esta pero es para decir lo que facilita la vida ispconfig, 1 clic y tiene otro handler en una web o hasta otra versión de php si quiere, así de potente es ispconfig) no consume recursos, esta todo bien organizado y si tiene 20, 30 o 40 webs es mucho más cómodo con panel, agregar webs, bases de datos, gestionar emails etc

@Enlace eliminado

Si de drupal te preocupan las URLs amigables funcionan a la perfección y si quieres más poder puedes ponerle varnish, aunque si no quieres cambiar a nginx pásate a apache 2.4 con mpm_event verás tremenda mejoría casi casi tan bueno como nginx.

Es por eso que lo uso, solo consume recursos cuando se entra al panel. Aunque es incompatible a medias con Varnish, cada que edito un sitio desde el panel, tengo que cambiar puerto en el vhost, y recargar Apache. Porque solo soporta el puerto 80 y 443 para los sitios.

Lo malo es que Apache 2.4 no esta en la lista de paquetes estables. :fatigue: Pero probare nginx. :encouragement:
 
Desde
16 Oct 2010
Mensajes
3.090
Es por eso que lo uso, solo consume recursos cuando se entra al panel. Aunque es incompatible a medias con Varnish, cada que edito un sitio desde el panel, tengo que cambiar puerto en el vhost, y recargar Apache. Porque solo soporta el puerto 80 y 443 para los sitios.

Lo malo es que Apache 2.4 no esta en la lista de paquetes estables. :fatigue: Pero probare nginx. :encouragement:

Es que tienes que editar los templates por defecto de ispconfig así te cambia el puerto de una, y en cuanto a apache 2.4 usa los repos de dotdeb.
 

mundodigital

Curioso
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
13 Jun 2013
Mensajes
8
Yo tambien he tenido problemas con Fcgid, uso ISPConfig 3 en Debian 6, y en ocasiones manda errores 500 de la nada, y solo con reiniciar Apache se arregla, mod_php nunca me ha dado problemas de ese tipo, aunque consume un poco mas de memoria.

Te recomiendo reemplazar las directivas desde el mismo panel, en las opciones del sitio existe un textarea llamado "Directivas de Apache
", ahi podrias colocar eso, y asi no perder los cambios al editar tu sitio.

La verdad es que deje la configuracion PHP en ISPConfig por defecto ,pero en realidad se puede escoger Fast-CGI , CGI , ModPHP y SuPHP .

¿ Me recomiendas cambiar la configuración PHP al modulo de Apache que es ModPHP verdad ?

¿ Se puede cambiar de una configuración a otra sin problema ?

Si hago este cambio ¿ afectará al sitio actualmente configurado con FastCGI ?

Otra cuestión es las Directivas de Apache , para añadir unas variables lo que he hecho ha sido editar el fichero dominio.vhost dentro de /etc/apache2/sites-available . Pero según dices esta opción está en ISPConfig dentro de Web Domain / Opciones / Directivas de Apache , ¿ Verdad ? supongo que desde ahí también puedo colocar los cambios del Virtual Host . Probaré a ver .

Finalmente con los cambios que he hecho (modificando directamente las variables en dominio.vhost )
PHP:
IPCCommTimeout 7200
BusyTimeout 7200

De momento he conseguido que funcione la ejecución del script , aunque me sigue dando error . Se ejecuta la tarea cron y se para dando error , después se repite de nuevo la tarea cron de forma automatica , después de un buen rato reintentando, la ejecución se repite al menos 8 veces , al final acaba por terminar de ejecutarse la tarea completa.

En consola da el siguiente error de forma ciclica y cada 15 minutos :

" Error de lectura (Expiró el tiempo de conexión) en las cabeceras. Reintentando.

El log de Apache arroja el siguiente error :

PHP:
gd-jpeg: JPEG library reports unrecoverable error: Empty input file

Por lo que he leido este error proviene (de la ejecución de una línea de código dentro del mismo script ) al cargar una imagen jpg y luego trabajar con ella con el GD2 de biblioteca PHP. Pero esto ya es otra historia.

Perdonar tanta pregunta :fatigue:
 

shadowhck

Lambda
Programador
Verificado por Whatsapp
Desde
18 Ago 2009
Mensajes
2.772
La verdad es que deje la configuracion PHP en ISPConfig por defecto ,pero en realidad se puede escoger Fast-CGI , CGI , ModPHP y SuPHP .

¿ Me recomiendas cambiar la configuración PHP al modulo de Apache que es ModPHP verdad ?

¿ Se puede cambiar de una configuración a otra sin problema ?

Si hago este cambio ¿ afectará al sitio actualmente configurado con FastCGI ?

Otra cuestión es las Directivas de Apache , para añadir unas variables lo que he hecho ha sido editar el fichero dominio.vhost dentro de /etc/apache2/sites-available . Pero según dices esta opción está en ISPConfig dentro de Web Domain / Opciones / Directivas de Apache , ¿ Verdad ? supongo que desde ahí también puedo colocar los cambios del Virtual Host . Probaré a ver .

Finalmente con los cambios que he hecho (modificando directamente las variables en dominio.vhost )
PHP:
IPCCommTimeout 7200
BusyTimeout 7200

De momento he conseguido que funcione la ejecución del script , aunque me sigue dando error . Se ejecuta la tarea cron y se para dando error , después se repite de nuevo la tarea cron de forma automatica , después de un buen rato reintentando, la ejecución se repite al menos 8 veces , al final acaba por terminar de ejecutarse la tarea completa.

En consola da el siguiente error de forma ciclica y cada 15 minutos :



El log de Apache arroja el siguiente error :

PHP:
gd-jpeg: JPEG library reports unrecoverable error: Empty input file

Por lo que he leido este error proviene (de la ejecución de una línea de código dentro del mismo script ) al cargar una imagen jpg y luego trabajar con ella con el GD2 de biblioteca PHP. Pero esto ya es otra historia.

Perdonar tanta pregunta :fatigue:


¿ Me recomiendas cambiar la configuración PHP al modulo de Apache que es ModPHP verdad ?
Si, aunque es un poco mas estable y rapido, aunque consume un poco mas de memoria. Como consecuencia tendras que cambiar los permisos de los archivos con la mayoria de CMS para que funcionen correctamente, aunque no es ningun problema.

¿ Se puede cambiar de una configuración a otra sin problema ?
Los cambios son casi al instante, y al momento sabrias si funciona bien el cambio, o no, y si surge algun problema, bien puedes regresar a la configuracion anterior.

Si hago este cambio ¿ afectará al sitio actualmente configurado con FastCGI ?
Los cambios solo afectan al sitio al que se le efectua el cambio.

Otra cuestión es las Directivas de Apache , para añadir unas variables lo que he hecho ha sido editar el fichero dominio.vhost dentro de /etc/apache2/sites-available . Pero según dices esta opción está en ISPConfig dentro de Web Domain / Opciones / Directivas de Apache , ¿ Verdad ? supongo que desde ahí también puedo colocar los cambios del Virtual Host . Probaré a ver .
No te recomiendo jugar con esos valores, es mas sencillo simplemente usar DSO (mod_php), y elevar el tiempo de ejecucion, y seria todo lo que tienes que hacer; a no ser que el problema no sea tu server/script, si no la fuente externa.

Mi conclusion es: Si tienes problemas con FastCGI, usa mod_php. La diferencia importante, es que los cambios en php.ini son globales. :encouragement:

Favor de corregirme si me equivoco en algo. :welcoming:
 
Desde
16 Oct 2010
Mensajes
3.090
[MENTION=44704]mundodigital[/MENTION] el handler de php lo puedes cambiar sin problemas siempre que este instalado, en ispconfig te aparece ahí siempre este o no este instalado y te deja cambiarlo, pero si no esta instalado te dará error o te descargará los archivos php.
 
Arriba