Foros del Web » Programando para Internet » PHP »

¿Correr funciones php a nivel de servidor?

Estas en el tema de ¿Correr funciones php a nivel de servidor? en el foro de PHP en Foros del Web. No se si el titulo explica bien el problema, lo que busque es tener un script de php que este siempre funcionando mientras el servidor ...
  #1 (permalink)  
Antiguo 23/02/2009, 13:47
Avatar de bLEx  
Fecha de Ingreso: mayo-2008
Ubicación: Villa Alemana, Chile
Mensajes: 181
Antigüedad: 15 años, 11 meses
Puntos: 5
¿Correr funciones php a nivel de servidor?

No se si el titulo explica bien el problema, lo que busque es tener un script de php que este siempre funcionando mientras el servidor este arriba...

El sistema que estoy desarrollando en cierta parte de su flujo de trabajo ingresa una serie de fechas que corresponden a hitos y estos quedan almacenados en la base de datos...


lo que quiero es tener un estilo daemon en el servidor que consulte la base cada cierto tiempo y cuando se cumplan las fechs, envio lso respectivos email...

Claramente la parte del daemon es la que me importa... Por favor si alguein sabe como hacerlo, que ilumine esta caezita ^^


s2
  #2 (permalink)  
Antiguo 23/02/2009, 13:54
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: ¿Correr funciones php a nivel de servidor?

Cron Jobs en Linux o Tareas Programadas en Windows.

http://www.google.com/search?hl=es&r...tnG=Buscar&lr=
  #3 (permalink)  
Antiguo 23/02/2009, 14:00
 
Fecha de Ingreso: mayo-2005
Ubicación: Patzcuaro
Mensajes: 106
Antigüedad: 18 años, 11 meses
Puntos: 2
Respuesta: ¿Correr funciones php a nivel de servidor?

Como dice Ronruby puedes usar un cron y andarlo cada 5 o x minutos.

En el peor de los casos podrias hacer un While(1) o infinito y dejar que este monitoreando... pero no es muy optimo y flexible verdad?
__________________
_
  #4 (permalink)  
Antiguo 23/02/2009, 14:16
Avatar de bLEx  
Fecha de Ingreso: mayo-2008
Ubicación: Villa Alemana, Chile
Mensajes: 181
Antigüedad: 15 años, 11 meses
Puntos: 5
Respuesta: ¿Correr funciones php a nivel de servidor?

pero si usara un while(1) estaria trabajando desde el lado del cliente y no del servidor...

Eso igual (while(true) y me funciono bien en firefox, pero no en internet explorer q es donde tengo que trabajar...


Voy a averiguar eso de las tareas programadas de windows, algo lei que habia que llamar al interprete PHP y despues la ruta del script algo asi

Código:
C:\php\php.exe C:\....\script.php
Pero aun no me leido mucho al respecto, si alguien tiene una idea mas encaminadora que las ya entregadas se lo agradeceria...

Gracias michoacano y ronruby :P...
  #5 (permalink)  
Antiguo 23/02/2009, 14:26
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: ¿Correr funciones php a nivel de servidor?

Asi es, llamas al interprete de PHP y abres el archivo que quieras.

Dentro de el archivo php que se va a ejecutar, creas tu consulta y todo lo que desees que haga el script.

Seria:
Cita:
/ruta/hacia/php.exe -f /archivo/cronjob.php
http://www.adminschoice.com/docs/crontab.htm
  #6 (permalink)  
Antiguo 23/02/2009, 15:58
 
Fecha de Ingreso: junio-2005
Mensajes: 343
Antigüedad: 18 años, 10 meses
Puntos: 10
Respuesta: ¿Correr funciones php a nivel de servidor?

La solución del while no sería válida, ya que te daría error por TIME_LIMIT. Por defecto suele ser 30 segundos.

Lo del crontab es lo mejor que hay, lo más común, lo más optimo y lo que más puedes monitorizar (ya que puedes hacer que se te envie la salida del script cada vez que se ejecuta).


Espero haber aclarado xq no se puede utilizar el while.
  #7 (permalink)  
Antiguo 23/02/2009, 16:07
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: ¿Correr funciones php a nivel de servidor?

Puedes poner set_time_limit(0) y con eso evitas que el script se termine por el tiempo limite.

Saludos
  #8 (permalink)  
Antiguo 23/02/2009, 17:36
 
Fecha de Ingreso: octubre-2003
Ubicación: Cerca de una wifi o 3G
Mensajes: 328
Antigüedad: 20 años, 6 meses
Puntos: 4
De acuerdo Respuesta: ¿Correr funciones php a nivel de servidor?

hay varias formas y trucos

hay una funcion en php que si la incluyes en tu script, aunque el usuario cierre la pagina el script sigue funcionando hasta que termina, lo del time limit tambien es necesario, tambien puedes usar fsockopen o curl en tus paginas para que el script haga la llamada desde el mismo servidor asi el usuario no tiene que estar esperando a que cargue tu script.

tengo pesima memoria pero voy a buscar en los script que tengo funcionando

una de las cosas interesantes que realice con estos codigos es que cree un monitor de carga en php, lo que hace es almacenar tareas que generan carga en el servidor, como pro ejemplo la creacion de archivos zip grandes, tratamiento de lotes de imagenes o de video etc, entonces tengo una bd con las tareas pendientes las que se estan ejecutando (pueden ser mas de una para servidores multinucleo)
y el resultado de las tareas, algunas se ejecutan de noche otras en forma inmediata y en fin es re entretenido.

Ocupa php pero la version cli, en los release de php siempre se incluye esta version que es el mismo motor de php pero puro, sin headers (son innecesarios y un poco molestos ya que no se ejecutan por un navegador, sino desde consola)

configuras el schedule task
New task
Run: C:\PHP\phpcli.exe C:\sites\script.php
start in: C:\sites\

el start in: es para que el archivo tenga como ruta relativa la misma carpeta donde esta el script

es importante que el usuario de windows tenga acceso al script.php y a phpcli.exe (generalmente siempre hay errores en esta parte, yo desconfio mucho de la seguridad de un windows ocupo usuarios distintos para todo, asi si hackean una cuenta o se meten por un script igual estan limitados y monitorizados xD)

es importante que el script.php llame a rutas completas y no relativas, sobre todo si lo vas a llamar desde otras partes tambien, me refiero a los includes etc etc

configuras para todos los dias, cada 5 minutos, en forma repetitiva, y hasta una duracion de 23:59 (no recuerdo porque 23:59 pero aveces no se ejecutaba o se producian errores)

es importante que el script detecte si ya esta corriendo otros script (yo he dejado que corran 4 script simultaneos pero si detecta que ya hay 4 procesos no se ejecuta, claro que en servidores multinucleo)

bueno hay hartas cosas que tomar en cuenta, puedes generar un archivo de log para ver como va funcionando y despues para fallas mas complicadas puedes hacer que te envie un email por ejemplo si el proceso se esta demorando mucho (cuelgue del servidor o del programa que este ejecutando tu script) piensa en todo lo que puede pasar y siempre genera respuestas aunque sea un echo "ok"; asi podras corroborar que las tareas si se estan haciendo.

-----------
//este es el codigo para impedir que el script pare cuando se cierra la pagina, con esto podrias hacer un include desde cualquier pagina dentro del servidor.

ignore_user_abort(TRUE);

//tu codigo

//obviamente queremos que pare en algun momento
ignore_user_abort(FALSE);die;

hay otras cosas que se pueden configurar en el php.ini o en el httpd.conf de apache o en iis en un archivo xml que hay que activar en iis (sino se usa el registro lo cual es una mierda)

si tienes algun problema me dices seguro voy recordando mas cosas en el camino
__________________
Ayuda!! firmar y compartir
No a la privatizacion de semillas http://www.thepetitionsite.com/1/no-...n-de-semillas/
Mas info: http://chilesintransgenicos.cl/

Última edición por Remsankar; 23/02/2009 a las 18:15
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 23:58.