Programar tarea en segundo plano

Temas sobre programación ( php, c, sql, html, perl, python, ruby, java, bash, etc ) y recursos ( herramientas, frameworks, hosting, cms, etc )

Moderadores: akodo, maiku

Responder
Avatar de Usuario
greer
Forista Medio
Forista Medio
Mensajes: 334
Registrado: Mar Feb 27, 2007 8:00 am
Ubicación: PANAMA

Programar tarea en segundo plano

Mensaje por greer » Dom Feb 22, 2015 12:06 am

Buen día estimados.

Este es el caso: Tengo un cliente que por medio del backend de su página web crea eventos/publicidad y al momento de guardar, estos tienen una fecha limite para aparecer en dicha página web.

Lo que me pide el cliente es que al llegar al tiempo limite el sistema haga el cambio necesario para que ya no aparesca online.

conosco sobre el comando at pero no tengo muy claro como puedo hacer que este acepte mi petición.

Ya tengo el comando para que php por medio de shell_exec() entre a un archivo con los parametros necesarios para hacer los cambios en la base de datos y es algo como esto:
shell_exec(php-cgi evento.php eventoID=3395 activo=0);
El punto es que no se como poner este comando para que at lo programe para una fecha en particular, para que el servidor entre a dicho archivo...

Esto es lo que se me ocurre... derrepente no es la mejor idea hacerlo de este modo.

¿ a alguien se el ocurre algo mejor ? la idea es que automaticamente el evento/publicidad deje de estar online.
http://greermurray.com
Avatar de Usuario
akodo
Moderador
Moderador
Mensajes: 1457
Registrado: Mié Nov 28, 2007 8:00 am
Ubicación: En la X del explorer (pulse para llamar)

Re: Programar tarea en segundo plano

Mensaje por akodo » Dom Feb 22, 2015 2:10 am

Mucho más fácil de lo que lo estás planteando.

Considera que el usuario guarda un evento en un tiempo "t" (unix epoque 19412000) con un tiempo de vida "x" (3600 secs). El evento caduca en "t+x" (unix epoque 19415600). Este es un dato que lo guardas junto con el evento.
Cuando el usuario entre en la página, entrará en un momento determinado. Si es posterior a "t+x" entonces el evento no se muestra.

http://php.net/manual/es/function.time.php

El planteamiento no es habilitar o deshabilitar un evento, sino saber si ese evento ha caducado o no.
Descargue el gestor de mp3 "Music Manager" -> ([url=http://ctrlalt.iespana.es]mmlf[/url])
Última versión del gestor "Music Manager" -> ([url=http://sourceforge.net/projects/jmusicmanager/]jmmm[/url])
Avatar de Usuario
greer
Forista Medio
Forista Medio
Mensajes: 334
Registrado: Mar Feb 27, 2007 8:00 am
Ubicación: PANAMA

Re: Programar tarea en segundo plano

Mensaje por greer » Dom Feb 22, 2015 3:05 am

Tienes toda la razón!! jajajjaa me he complicado todo... por pensar que era una tarea compleja he buscado una solución compleja...

akodo el que sabe sabe!

akodo si te has fijado este tema tiene relación con el otro tema, el de las expresiones regulares, que tu igual me ayudaste a abrir los ojos y a pensar con claridad!

akodo este tema y la solución del mimsmo (pienso yo) al final de la linea "mataba 2 pajaros de un tiro" y aprovecho esta coyuntura para preguntarle al foro y en este caso a ti, lo siguiente y que derrepente sea igual de facil solución...

Ya caducado dicho evento al final tambien mandaba un correo al dueño del evento, indicando que dicho evento ya estaba fuera de linea.

yo pensaba usar la mimsa solución para mandar el correo una vez llegase el tiempo real.

si el tiempo final era el 26-02-2015 01:00:00 en ese día y tiempo se mandara un correo.
http://greermurray.com
Avatar de Usuario
akodo
Moderador
Moderador
Mensajes: 1457
Registrado: Mié Nov 28, 2007 8:00 am
Ubicación: En la X del explorer (pulse para llamar)

Re: Programar tarea en segundo plano

Mensaje por akodo » Dom Feb 22, 2015 9:51 pm

Para el caso en que tengas que mandar el correo cuando el evento caduque, todo depende de cuán crítico sea el envío del correo.
  • Si no es para nada crítico, simplemente no lo mandes. Acaba complicando la solución y es otro punto de fallo a tener en cuenta.
  • Si tienes que mandar el correo, pero no importa cuándo llegue (podría tardar días), puedes implementar un chequeo de qué eventos están caducados al cargar ciertas página o todas incluso. La comprobación debería ser ligera y a ser posible, el envío del correo asíncrono para evitar un notable retardo en la carga de la página. La solución depende del tráfico que haya en la página, con lo que si el envío es crítico puede no ser la mejor solución.
  • La última opción sería tener un cron job que se ejecutara cada hora o cada 30 min que mande el correo de los eventos caducados. Habría que ver que retardo es aceptable para evitar una carga excesiva del servidor.
Descargue el gestor de mp3 "Music Manager" -> ([url=http://ctrlalt.iespana.es]mmlf[/url])
Última versión del gestor "Music Manager" -> ([url=http://sourceforge.net/projects/jmusicmanager/]jmmm[/url])
Avatar de Usuario
greer
Forista Medio
Forista Medio
Mensajes: 334
Registrado: Mar Feb 27, 2007 8:00 am
Ubicación: PANAMA

Re: Programar tarea en segundo plano

Mensaje por greer » Lun Feb 23, 2015 6:25 am

hola,

opté por usar el comando at de la siguiente forma:

Código: Seleccionar todo

echo 'php /home/greer/html/prueba.com/test.php' | at 23:09 22.02.2015
es como un cron job pero se ejecuta solo una vez, no es periodico...

en linea de comandos me funciona de maravilla.

el problema ahora es que por algun motivo cuando lo intento integrar a la página php no me sale...

Código: Seleccionar todo

$url_comando = "echo 'php /home/murray/Cloud/postteem.com/test.php' | at 23:09 22.02.2015";
shell_exec($url_comando);
alguien tiene idea de por que shell_exec() no me reconoce el comando ?
http://greermurray.com
Responder
  • Similar Topics
    Respuestas
    Vistas
    Último mensaje