Gratis Te mudamos el sitio y los correos sin cortes ni costo

0810 345 6377 ESEN, cambiar a inglés
InHosting
ESEN, cambiar a inglés

Guías de DirectAdmin

Cron en DirectAdmin: cómo programar tareas en tu hosting

Por el equipo técnico de InHosting8 min de lectura

En pocas palabras

En DirectAdmin, las tareas programadas se crean en Funciones avanzadas, Cron Jobs: completás cinco campos de horario (minuto, hora, día, mes y día de la semana) y el comando. Por ejemplo, 0 4 * * * corre todos los días a las 4:00 y */10 * * * * cada diez minutos. Para un script PHP, ejecutá el archivo con /usr/local/bin/php y su ruta completa en lugar de llamar a la URL, y terminá el comando con >> archivo.log 2>&1 para que la salida no te llene de correos. La hora que cuenta es la del servidor, que puede no ser la de Argentina.

Un ejemplo completo antes de la teoría

Cron es el programa del sistema operativo que ejecuta comandos en horarios fijos, entre alguien al sitio o no. Sirve para lo que tiene que pasar solo: vaciar temporales, mandar recordatorios, traer el listado de precios de un proveedor, volcar la base a un archivo.

Supongamos que tu sitio tiene un script que borra los presupuestos vencidos y querés que corra todas las madrugadas a las 4. En el formulario del panel cada campo va en su casillero; escrito en una línea, como lo guarda el sistema, queda así:

0 4 * * *   /usr/local/bin/php /home/usuario/domains/tudominio.com.ar/public_html/scripts/limpiar.php >> /home/usuario/limpiar.log 2>&1
  • 0 4 * * * es el horario: minuto 0, hora 4, y cualquier día, mes y día de la semana.
  • /usr/local/bin/php es el intérprete de PHP del servidor, con su ruta completa.
  • La ruta del script empieza en /home/usuario, donde usuario es el de tu cuenta de hosting. Copiala del administrador de archivos para no equivocarte.
  • >> /home/usuario/limpiar.log 2>&1 guarda lo que el script imprime, errores incluidos, en un archivo en lugar de mandarlo por correo.

Dónde se crea en el panel

  1. Entrá a DirectAdmin con el usuario y la clave de tu cuenta de hosting, los del correo de bienvenida.
  2. Buscá "Funciones avanzadas" (Advanced Features) y abrí "Cron Jobs". Si no la ves, escribí "cron" en el buscador del panel.
  3. Tocá el botón para crear una tarea nueva, completá los cinco campos de horario y el comando.
  4. Guardá. La tarea aparece en la lista y corre en el próximo horario que coincida; no hay que reiniciar nada.

Cómo se lee el horario

Los cinco campos van en este orden: minuto (0 a 59), hora (0 a 23, reloj de 24 horas), día del mes (1 a 31), mes (1 a 12) y día de la semana (0 a 7, donde el domingo es 0 y también 7). Cada uno acepta un número, un asterisco o una combinación:

SímboloSignificaEjemplo en el campo de la hora
*Cualquier valor*: todas las horas
Un númeroEse valor exacto14: a las 14
,Una lista8,13,19: a las 8, a las 13 y a las 19
-Un rango9-18: de 9 a 18, ambas incluidas
/Un paso*/6: a las 0, 6, 12 y 18

Horarios frecuentes, listos para copiar

HorarioCuándo corre
*/10 * * * *Cada diez minutos
15 * * * *A los quince minutos de cada hora
0 4 * * *Todos los días a las 4:00
0 7 * * 1-5De lunes a viernes a las 7:00
0 23 * * 0Los domingos a las 23:00
0 6 1,15 * *Los días 1 y 15 de cada mes a las 6:00
30 5 1 1,4,7,10 *El primer día de cada trimestre a las 5:30

Si ponés un valor en el día del mes y otro en el día de la semana, cron corre cuando se cumple cualquiera de los dos, no ambos. Para una sola condición, dejá el otro campo en asterisco.

La hora del servidor puede no ser la tuya

Cron usa el reloj del servidor. Argentina está en UTC−3 todo el año, sin horario de verano, y muchos servidores trabajan en UTC: si es el caso, una tarea con hora 4 corre a la 1 de la madrugada de Buenos Aires. Para una limpieza da lo mismo; para un aviso que tiene que salir a las 9 en punto, no.

El hosting no tiene acceso por SSH, así que la hora del servidor se averigua con una tarea de prueba: creá una cada cinco minutos con el comando date >> /home/usuario/reloj.txt, compará lo que anota con tu reloj y borrala.

PHP por consola o una URL: cuál elegir

Ejecutar el script con el intérprete de consola no pasa por el servidor web: no tiene el límite de tiempo de una visita y nadie de afuera lo puede activar. Llamar la URL con curl es como abrir la página en el navegador: el script ve el dominio y las cabeceras, pero corre con los límites del servidor web y cualquiera que conozca la dirección lo puede disparar.

Por consola es la opción correcta casi siempre. La URL tiene sentido cuando el script depende del dominio para funcionar, o cuando el propio sistema te da una dirección de cron con una clave, como hacen PrestaShop y otras aplicaciones.

# por consola (recomendado)
/usr/local/bin/php /home/usuario/domains/tudominio.com.ar/public_html/tarea.php >> /home/usuario/tarea.log 2>&1
# por URL, solo si el script lo necesita
curl -fsS "https://tudominio.com.ar/tarea.php?clave=una-clave-larga" >> /home/usuario/tarea.log 2>&1
  • Si tu sitio usa una versión de PHP distinta de la principal, el intérprete de esa versión suele estar en una ruta como /usr/local/php82/bin/php, con el número de la versión. Si dudás, preguntale al soporte cuál corresponde a tu cuenta.
  • Cuando la tarea arranca, la carpeta actual no es la del sitio. Si el script incluye archivos con rutas relativas, agregá al principio chdir(__DIR__);.
  • El signo % tiene un significado especial en cron, que corta el comando ahí. Si lo necesitás, por ejemplo en date +%F, escribilo como \%.

Que no te llegue un correo por cada corrida

Cron manda por correo todo lo que el comando imprime. Una tarea cada diez minutos que escribe una sola línea genera 144 mensajes por día. Según cómo esté configurada la página de Cron Jobs, van a la dirección que figure ahí o al buzón de sistema de la cuenta, que no es ninguna de tus casillas: nadie los lee y ocupan el disco del plan hasta que alguien se da cuenta.

  • >> /home/usuario/tarea.log 2>&1 guarda todo en un archivo. Es lo mejor: si algo falla, tenés el registro.
  • > /dev/null 2>&1 lo descarta. Sirve para tareas que ya sabés que andan.
  • El 2>&1 es lo que suma los errores. Sin eso solo redirigís la salida normal, y los errores siguen llegando por correo.
  • El archivo de registro también crece. Si la tarea es frecuente, sumá otra que lo vacíe una vez por mes con : > /home/usuario/tarea.log.

El cron de WordPress, hecho bien

WordPress no tiene reloj propio: revisa si hay tareas pendientes cada vez que alguien carga una página. En un sitio con pocas visitas, una entrada programada para las 8 puede publicarse a las 11; en uno con muchas, a alguna visita le toca cargar con el trabajo atrasado. La solución es apagar ese mecanismo y que lo dispare el servidor:

  1. En wp-config.php, antes del comentario que marca el final de la edición, agregá define( 'DISABLE_WP_CRON', true );.
  2. Creá una tarea con horario */10 * * * * y el comando /usr/local/bin/php /home/usuario/domains/tudominio.com.ar/public_html/wp-cron.php >> /home/usuario/wp-cron.log 2>&1.
  3. Al día siguiente, revisá que el registro no tenga errores y programá una entrada de prueba para dentro de media hora.

Cuando la tarea no hace nada

  • Mirá primero el archivo de registro. Si está vacío, agregá al principio del script una línea que imprima la fecha: así sabés si llegó a arrancar.
  • Revisá que el comando use rutas completas, tanto la del intérprete como la del script. La tarea corre con un entorno mínimo y no conoce los atajos de tu sesión.
  • Como el hosting no tiene SSH, probá el comando con una tarea que corra cada cinco minutos y mande todo a un archivo, agregando >> /home/usuario/prueba.txt 2>&1 al final. Leé el archivo desde el administrador de archivos y borrá la tarea cuando funcione.
  • Si el script anda en el navegador y no en cron, casi siempre es una ruta relativa o algo como $_SERVER['HTTP_HOST'], que por consola no existe.
  • Si la tarea tarda más que el intervalo, las corridas se enciman. Espaciala o poné /usr/bin/flock -n /home/usuario/tarea.lock delante del comando: una corrida nueva se retira si la anterior sigue.

Preguntas frecuentes

¿Puedo programar una tarea para que corra una sola vez?

Cron no tiene "una sola vez": repite según el horario. Podés poner una fecha concreta, como 0 9 20 12 * para el 20 de diciembre a las 9, y borrar la tarea después, porque si no, se repite al año siguiente.

¿Por qué volvió a aparecer una tarea que borré?

Porque la creó un plugin o un instalador, que la vuelve a agregar si no la encuentra. Desactivá la opción en el plugin, o el plugin mismo, antes de borrarla del panel.

¿Qué hago si necesito algo casi en tiempo real?

Cron no baja del minuto, y en un hosting compartido no corresponde dejar procesos corriendo todo el tiempo. Si tu aplicación necesita una cola que procese trabajos al instante o un servicio que quede escuchando, es trabajo para un VPS con systemd, como contamos en tareas con cron y systemd.

¿La tarea usa recursos de mi plan?

Sí. Mientras corre ocupa procesador, memoria y un proceso de tu cuenta, igual que una visita. Por eso conviene dejar las tareas pesadas para la madrugada y no encimarlas con los horarios de más tráfico.

Seguí leyendo

¿Preferís que lo veamos juntos? Te atiende una persona.

Si la guía no alcanza para tu caso, contanos qué necesitás: te ayudamos a elegir el plan, a migrar o a configurar tu servidor.

Hablar con un técnico