ESEN
ESEN

Tareas programadas (cron) en DirectAdmin

· 7 min de lectura · por el equipo técnico de SISArgentina

Una tarea programada es un comando que el servidor ejecuta solo, a la hora que vos fijás, sin que nadie entre al sitio. En DirectAdmin se crean desde "Funciones avanzadas" (Advanced Features), en "Cron Jobs": cinco campos de horario —minuto, hora, día del mes, mes y día de la semana— más el comando. Un asterisco significa "cualquiera" y */15 significa "cada quince". Para un script PHP conviene llamar al binario de PHP con la ruta absoluta del archivo en vez de pedir la URL: así no hay límite de tiempo del servidor web ni una dirección que cualquiera pueda disparar desde afuera. Todo lo que el comando imprime sale por correo en cada corrida, así que conviene mandarlo a un archivo de registro. Y programar algo cada un minuto casi siempre es un error: si la corrida tarda más de un minuto, la siguiente arranca igual y se pisan.

Qué es una tarea programada

Es un comando que el servidor corre por su cuenta, en el horario que le indicás, aunque nadie esté mirando el sitio. El programa que se encarga se llama cron y es parte del sistema operativo. Eso lo diferencia de un automatismo que viva adentro del CMS: un plugin que promete un respaldo semanal en realidad espera a que alguien entre para acordarse.

Para qué la usa un sitio

  • Limpiezas: archivos temporales, presupuestos vencidos, sesiones viejas o el cache viejo.
  • Avisos: el recordatorio de un turno o la alerta de stock bajo a una hora fija.
  • Respaldos y sincronizaciones: volcar la base a un archivo, traer un listado de precios.
  • El cron de WordPress, que sin esto queda atado a que alguien visite el sitio.

Dónde está en el panel

  1. Entrá al panel en tudominio.com.ar:2222 con el usuario y la clave de la cuenta de hosting.
  2. Abrí "Funciones avanzadas" (Advanced Features) y entrá en "Cron Jobs": vas a ver la lista de tareas de tu cuenta, al principio vacía.
  3. Tocá el botón de crear: se abre un formulario con los cinco campos de horario y un campo largo para el comando.
  4. Completá y confirmá con "Crear" (Create); en algunas versiones dice "Agregar".

Los cinco campos, de izquierda a derecha

CampoValoresQué significa
Minuto0 a 59El minuto dentro de la hora
Hora0 a 23Reloj de 24 horas, el del servidor
Día del mes1 a 31Un día concreto del mes
Mes1 a 12El mes
Día de la semana0 a 7Domingo es 0 y también 7; lunes es 1

Un asterisco quiere decir "cualquiera". La coma enumera valores sueltos (1,15), el guion arma un rango (9-18) y la barra marca un intervalo (*/10 es cada diez). Se combinan entre sí, y así sale un horario raro sin crear cinco tareas casi iguales.

Horarios que se entienden leyéndolos

Los cinco camposCuándo corre
0 3 * * *Todos los días a las 3:00
*/15 * * * *Cada quince minutos, siempre
30 2 * * 1Los lunes a las 2:30
0 8 1 * *El día 1 de cada mes a las 8:00
0,30 9-18 * * 1-5En punto y a y media, de 9 a 18, de lunes a viernes

La hora es la del servidor, que no tiene por qué ser la de Buenos Aires: para una limpieza de madrugada da igual, para un aviso de las 9 en punto no. Se mide con una tarea temporal que corra date >> /home/juan/hora.log.

Llamar una URL o ejecutar el archivo PHP

Las dos ejecutan el mismo script por caminos distintos, y eso cambia lo que el script ve y cuánto puede tardar. Llamar la URL es pedirle la página al servidor web, igual que una visita; ejecutar el archivo es pasarle la ruta al intérprete de PHP, sin pasar por el servidor web.

El correo de cada corrida

Cron le manda por correo al usuario del sistema todo lo que el comando imprime, la salida normal y los errores: un script que escribe "listo" genera casi cien mensajes por día si corre cada quince minutos.

Ese correo no llega a la casilla del dominio que leés todos los días: va al buzón de sistema de la cuenta, el directorio /Maildir, separado de las casillas del dominio. Por eso nadie los ve durante meses y, cuando alguien mira, hay miles ocupando espacio del plan.

Por qué cada un minuto casi siempre está mal

  • Si la corrida tarda más de un minuto, la siguiente arranca igual: dos copias del mismo script tocando la misma base, con los bloqueos y los datos duplicados que eso trae.
  • En un plan compartido hay un tope de procesos simultáneos. Las corridas encimadas se lo comen y el sitio devuelve errores a las visitas reales.
  • Son 1.440 corridas por día: si llama una URL, son 1.440 visitas propias que ensucian las estadísticas.
  • Cuando de verdad hace falta frecuencia alta, lo que falta no es más cron sino un candado: que la tarea se retire si ya hay otra corriendo.

El cron de WordPress

WordPress trae su propio programador, wp-cron.php, con un defecto de origen: no corre solo, corre cuando alguien entra al sitio. Con pocas visitas las publicaciones programadas salen tarde y los respaldos no se hacen; con muchas, a alguna visita le toca esperar el trabajo pendiente.

Cuando la tarea no corre

  • La ruta está mal escrita o es relativa. Copiala del administrador de archivos y pegala entera.
  • El comando llama a php a secas: poné la ruta completa del intérprete, porque la tarea no hereda el camino de búsqueda de tu sesión.
  • El script anda en el navegador pero no por consola porque usa rutas relativas a la carpeta del sitio.
  • La hora del servidor no era la que suponías y la tarea corrió varias horas antes o después.
  • Si el registro está vacío, imprimí algo al principio del script: así sabés si llegó a arrancar.

Preguntas frecuentes

¿Se puede programar algo cada pocos segundos?

No: la unidad más chica de cron es el minuto. Si necesitás algo casi continuo, lo que corresponde es un proceso que quede corriendo, y eso no entra en un plan compartido: es terreno de VPS.

¿La tarea corre aunque el sitio no reciba visitas?

Sí, y esa es la diferencia con el programador interno de un CMS. Cron es del sistema operativo: corre con el sitio vacío y aunque el dominio todavía no resuelva.

¿Por qué me llegan correos cada vez que corre?

Porque el comando imprime algo y cron manda esa salida por correo. Agregale >> /home/juan/tarea.log 2>&1 al final para que quede en un archivo en vez de generar un mensaje por corrida.

Seguí leyendo