Tareas programadas (cron) en servidores web

A ver si alguien me puede decir como poder hacer lo siguiente.

Estoy desarrollando una página web en la que habrán suscriptores, pon como ejemplo una web de empleo, de inmuebles ... De lo que sea que emita emails con propuestas ... El tema es que a mis oídos llegó el tema "cron", que por lo que me decían era o es una especie de tarea programada. Bien, el tema, es que dicha web la alojaré en un servidor de los múltiples que hay en internet ... Pero ¿cómo hacer que dicha web envíe los emails con las propuestas que se hallen en ese momento en la base de datos?. No tengo ni idea de cómo hacerlo. Mi idea era generar una tarea programada (cron) en dicho servidor y que ejecutara la web que he diseñado, al ejecutar dicha web mediante un parámetro, le indicaría que ha de generar los emails y enviarlos ... ¿os parece correcto? De esta manera solo tendría que revisar de vez en cuando que la web está ejecutándose y que los emails se envían ...

Lo que no sé si p.ej si genero un ejecutable que se ejecute indefinidamente en ese servidor ... ¿eso es un cron, se puede considerar un cron? ...

Si se os ocurre otra manera de hacerlo, o si un cron conlleva algo más de lo que comento.

1 respuesta

Respuesta
1

De nuevo algoran,

Si, la mejor forma de ejecutar una tarea programada recurrente es mediante un cron ahora bien, esto es un servicio que debe proporcionarte tu proveedor de hosting y no todos lo hacen (sobretodo los gratuitos) así que si este es tu caso me temo que tendrás que buscar soluciones alternativas.

Como bien dices lo primero es tener una URL de tu web que, cuando reciba una petición con ciertos parámetros, ejecute la consulta que necesitas y envíe los respectivos mails.

Además para que ningún robot o usuario malintencionado acceda a dicha URL podrías protegerla para que solo acepte peticiones autenticadas (puedes usar oauth o un sistema de clave protegida con un hash cuya clave privada solo conozcas tu) o, lo más sencillo, solo permitir las peticiones cuyo origen es cierta IP.

¿Dónde monto mi cron? Como te decía lo ideal sería alojarlo en tu servidor pero este depende de tu servicio de hosting:

  • ¿Es un servidor dedicado?
    • Entonces no tienes problemas. Puedes usar crontab en linux o hacer un servicio de windows de forma muy sencilla
  • ¿Es hosting compartido?
    • Mira si en tu panel de control tienes la opción de crear tareas programadas (hacer un cron cada X minutos contra una URL es el cron más común del mundo... otra cosa es que te lo ofrezcan y otra es que lo hagan gratis)
  • ¿No puedes hacerlo desde tu propio servidor?

¡Gracias! 

Vamos, que mi idea no era mala, sino todo lo contrario ¿no? ... me refiero a la mediante una url pasar un parámetro y que lance esa funcionalidad ... pero es que no me parece "elegante" ...

Si es hosting compartido o dedicado aún no tengo claro qué será, estoy mirandolo.

Respecto a los servidores gratuitos si que he visto en su panel de control en algunos el tema de "Cron" ... por lo que si está supongo que se puede hacer ... aunque hay veces que el panel es común para todos los usuarios, los que pagan y los que no, y al acceder a una función te dicen aquello de "solo para cuentas premium" o algo parecido.

Lo que no sabía es que habían sitios en los que te permiten hacer "cron's" de manera gratuita, aunque sea limitada ...les echaré un vistazo tambien ...

Hablando de esto mismo, a ver que opinas ... me refiero a lo que ejecutar el cron mediante una opción del menú de la web, mediante parámetro de la url ...

¿cómo lo harías?:

- Abriendo el navegador en tu máquina y ejecutándo la url en tu navegador y de esta manera acceder a la web como si fueras cualquier otro usuario, pero pasándole como parámetro el "desencadenante" de dicho "cron" ..., o bien ... (si se puede hacer)

- Accediendo remotamente a dicho servidor mediante p.ej Teamviewer y ejecutar directamente en su navegador la url que desencadene el proceso ...

Saludos.

Desde luego exponer una url (aunque luego esté protegida por IP) no es la solución más elegante.

Lo correcto es tener un servicio local instalado en tu servidor que se encargue se ejecutar periódicamente la tarea pero esto, claro está, requiere una infraestructura más dedicada, tiene su coste, no se puede programar en un lenguaje web (tendrías que irte a C#, Java, Python... etc) y requiere conocimientos de mantenimiento de servidores.

Te recomiendo empezar con algo sencillo que se ejecute en URL como hemos hablado y protegerlo por IP. Si optas por uno de los crons gratuitos que te he comentando seguro que en la documentación te indican cual es la IP desde la que van a hacer la petición y la podrías poner en la lista blanca de tu página cron.

También puedes agregar a las IP's permitidas la localhost para, en caso de que se lance la URL desde el propio servidor también se ejecute.

De este modo permites las peticiones locales y las remotas (solo desde ciertas IP's) y puedes configurarlo como quieras.

No entiendo a qué te refieres a que requiere conocimiento de mantenimiento de servidores.

La opción que planteas de desarrollar en un lenguaje "no web", o sea un lenguaje de escritorio, es una de las opciones que tenía yo al principio, desarrollar algo en .net, ejecutar dicho ejecutable y que mediante un temporizador fuera analizando si realizar la tarea o no ...

De hecho, creo que seria lo mejor.

La duda que tengo es que si un servidor (pongamos de pago) lo puedes manejar con escritorio remoto o no ... ya que p.ej con teamviewer puedes acceder a un pc, lanzar una tarea, desconectarte y esa tarea sigue ejecutándose ... por lo que no tendría que estar continuamente pendiente de ella.

Si, todo servidor dedicado Windows tiene acceso por Escritorio Remoto para que puedas ejecutar una aplicación de consola (por ejemplo) que tenga un timer que lance la tarea aunque, si yo tuviera que hacerlo, lo haría como un servicio de windows que se arranque solo al iniciar al servidor y se ejecuta siempre sin necesidad de que un usuario lo haya lanzado.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas