Foros del Web » Programando para Internet » PHP » Configuración PHP »

Ejecutar script con php+Apache

Estas en el tema de Ejecutar script con php+Apache en el foro de Configuración PHP en Foros del Web. Buenas compañeros, Mi problema es el siguiente: Intento ejecutar desde PHP4.3.9 + Apache/2.0.52 (Red Hat) un script de shell Unix(Red hat) mediante la función de ...
  #1 (permalink)  
Antiguo 09/10/2009, 03:28
Avatar de cubic  
Fecha de Ingreso: febrero-2007
Mensajes: 51
Antigüedad: 17 años, 2 meses
Puntos: 1
Pregunta Ejecutar script con php+Apache

Buenas compañeros,

Mi problema es el siguiente:

Intento ejecutar desde PHP4.3.9 + Apache/2.0.52 (Red Hat) un script de shell Unix(Red hat) mediante la función de php
Código PHP:
shell_exec(); 
El problema en cuestión es que si al script que llamo le hago leer un archivo de más de 100.000 lineas se cierra el procesa y me devuelve un "Segmentation fault" en la llamada al programa, mientras que si ejecuto el mismo script desde la propia shell como usuario root no tengo problemas para ejecutar el script correctamente aunque tenga 200.000 lineas por ejemplo.

El archivo de 100.000 lineas pesa
Código:
5,3 MiB (5600026 bytes)
El archivo de 100.001 lineas pesa
Código:
5,3 MiB (5600088 bytes)
Entonces yo he probado lo siguiente:

· Ejecutarlo desde shell con un java que llama al script. "Funciona"
· Ejecutarlo con la función
Código PHP:
system(); 
"No funciona"
· Ejecutarlo con la función
Código PHP:
exec(); 
"No funciona"
· Comprobar la configuración de "/etc/php.ini" :
Desde "/etc/php.ini":
Código:
safe_mode = Off
safe_mode_exec_dir =
max_execution_time = 520     ; Maximum execution time of each script, in seconds
max_input_time = 560	; Maximum amount of time each script may spend parsing request data
memory_limit = 250M      ; Maximum amount of memory a script may consume (8MB)
post_max_size = 80M
output_buffering = Off
Desde
Código PHP:
phpinfo(); 
Código:
safe_mode	Off	Off
safe_mode_exec_dir	no value	no value
max_execution_time	520	520
max_input_time	560	560
memory_limit	250M	250M
post_max_size	80M	80M
output_buffering	no value	no value
· Comprobar la configuración de Apache:
Desde "/etc/httpd/conf/httpd.conf":
Código:
Timeout 120
KeepAlive Off
MaxKeepAliveRequests 100
KeepAliveTimeout 15
Desde
Código PHP:
phpinfo(); 
Código:
Max Requests 	Per Child: 4000 - Keep Alive: off - Max Per Connection: 100 
HTTP_KEEP_ALIVE 	300
HTTP_CONNECTION 	keep-alive
Timeouts 	Connection: 120 - Keep-Alive: 15
Y al modificar los campos he hecho un
Código:
/etc/init.d/httpd restart
Espero que alguien tenga una idea.

Gracias

Última edición por cubic; 09/10/2009 a las 03:38
  #2 (permalink)  
Antiguo 09/10/2009, 08:59
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Ejecutar script con php+Apache

Prueba poner un set_time_limit(0) al inicio de tu script y ve si resuelve las cosas.

Saludos.
  #3 (permalink)  
Antiguo 13/10/2009, 05:23
Avatar de cubic  
Fecha de Ingreso: febrero-2007
Mensajes: 51
Antigüedad: 17 años, 2 meses
Puntos: 1
Respuesta: Ejecutar script con php+Apache

Cita:
Iniciado por GatorV Ver Mensaje
Prueba poner un set_time_limit(0) al inicio de tu script y ve si resuelve las cosas.

Saludos.
Gracias compañero,

Me sigue fallando, como puedo comprobar que realmente aplica esta función?
Me he leído este post pero nada: forosdelweb.com/f18/duda-con-set_time_limit-0-a-231681/

También he probado de poner:
Código PHP:
set_time_limit (0);//run script forever
ignore_user_abort ();//run script in background 
Pero no ha habido suerte.

He podido comprobar que si el script tarda más de 30 segundos en ejecutarse falla me he mirado esto peor no hay manera:
forosdelweb.com/f18/safe_mode-387463/

No me sale el error de Fatal error: Maximum execution time of 30 seconds exceeded in "" ....
Pero cuando pasa de 30 segundos se corta puede ser debido a alguna configuración de Apache?

Última edición por cubic; 13/10/2009 a las 08:56
  #4 (permalink)  
Antiguo 13/10/2009, 12:51
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Ejecutar script con php+Apache

Si esta safe_mode activado, mejor desactivalo ya que causa ese tipo de problemas.

Saludos.
  #5 (permalink)  
Antiguo 15/10/2009, 04:06
Avatar de cubic  
Fecha de Ingreso: febrero-2007
Mensajes: 51
Antigüedad: 17 años, 2 meses
Puntos: 1
Respuesta: Ejecutar script con php+Apache

Cita:
Iniciado por GatorV Ver Mensaje
Si esta safe_mode activado, mejor desactivalo ya que causa ese tipo de problemas.

Saludos.
Eso fue lo primero que hice como ves en el primer mensaje en mi configuración de php safe_mode esta en off.

No puede ser causa del output_buffering?

He leido que el set_time_limit no afecta a la función de system:
w w w .php-es.com/function.set-time-limit.html
Cita:
Nota: La función set_time_limit() y la directiva de configuración max_execution_time solo afectan el tiempo de ejecución del script mismo. Cualquier cantidad de tiempo utilizado en alguna acción que ocurra por fuera de la ejecución del script, tal como llamadas de sistema usando system(), operaciones de secuencias, consultas de bases de datos, etc. no es incluido al determinar el tiempo máximo que el script ha estado corriendo.
Gracias.

Última edición por cubic; 15/10/2009 a las 06:39
  #6 (permalink)  
Antiguo 15/10/2009, 08:53
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Ejecutar script con php+Apache

En ese caso lo que puedes hacer es lanzar el script de fondo y dejar que acabe el proceso por su parte, así te evitas ese problema.

Saludos.
  #7 (permalink)  
Antiguo 15/10/2009, 09:40
Avatar de cubic  
Fecha de Ingreso: febrero-2007
Mensajes: 51
Antigüedad: 17 años, 2 meses
Puntos: 1
Respuesta: Ejecutar script con php+Apache

Cita:
Iniciado por GatorV Ver Mensaje
En ese caso lo que puedes hacer es lanzar el script de fondo y dejar que acabe el proceso por su parte, así te evitas ese problema.

Saludos.
Es decir con el & al final del commando no?
Si es así lo hice y tampoco resulto.
  #8 (permalink)  
Antiguo 15/10/2009, 09:42
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Ejecutar script con php+Apache

No es solo eso, es desviar la salida, normalmente es así: &2>&1 o algo similar, no recuerdo la sintaxís correcta.

Saludos.
  #9 (permalink)  
Antiguo 16/10/2009, 00:53
Avatar de cubic  
Fecha de Ingreso: febrero-2007
Mensajes: 51
Antigüedad: 17 años, 2 meses
Puntos: 1
Respuesta: Ejecutar script con php+Apache

Cita:
Iniciado por GatorV Ver Mensaje
No es solo eso, es desviar la salida, normalmente es así: &2>&1 o algo similar, no recuerdo la sintaxís correcta.

Saludos.
Yo lo he redirigido así:
Código:
> /dev/null 2>&1 &
De este modo también se me cuelga solo con el proceso que tarda más el que trabaja con el archivo de 100.001 lineas y no el de 100.000.

Quiero usar la función apache_reset_timeout de php 5 con el php 4 hay alguna cosa similar ?

Última edición por cubic; 16/10/2009 a las 03:05
  #10 (permalink)  
Antiguo 16/10/2009, 09:05
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Ejecutar script con php+Apache

Desconozco si la hay para PHP4, aparte dice que solo funciona para Apache 1 (que ya esta Deprecated).

Si tu proceso es tan complejo trata de invocar primero el script que lo invoca usando la consola directamente con un script .sh o algo similar.

Saludos.
  #11 (permalink)  
Antiguo 19/10/2009, 00:55
Avatar de cubic  
Fecha de Ingreso: febrero-2007
Mensajes: 51
Antigüedad: 17 años, 2 meses
Puntos: 1
Respuesta: Ejecutar script con php+Apache

Cita:
Iniciado por GatorV Ver Mensaje
Desconozco si la hay para PHP4, aparte dice que solo funciona para Apache 1 (que ya esta Deprecated).

Si tu proceso es tan complejo trata de invocar primero el script que lo invoca usando la consola directamente con un script .sh o algo similar.

Saludos.
Gracias compañero,

Pero eso fue una de las primeras cosas que probé y nada.
  #12 (permalink)  
Antiguo 20/10/2009, 00:27
Avatar de cubic  
Fecha de Ingreso: febrero-2007
Mensajes: 51
Antigüedad: 17 años, 2 meses
Puntos: 1
Respuesta: Ejecutar script con php+Apache

Tema resuelto, el tema era que ejecutaba el script con:
Código:
#!/bin/sh
y el apache necesita:
Código:
#!/bin/bash

Última edición por cubic; 20/10/2009 a las 03:28
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 10:33.