Las tareas cron son tareas programadas que se ejecutan automáticamente a horas concretas. Son esenciales para el mantenimiento del servidor, las copias de seguridad y las tareas de las aplicaciones. En Theory7 usamos tareas cron para todo, desde copias de seguridad diarias hasta una monitorización con precisión de un minuto. En esta guía aprenderás a configurar y gestionar correctamente las tareas cron.

¿Qué son las tareas cron?

Una tarea cron es un programador de tareas de Unix que ejecuta comandos o scripts en momentos planificados. Esto permite automatizar tareas rutinarias, con lo que ahorras tiempo y reduces la probabilidad de errores humanos. Estos son los usos típicos:

  • Copias de seguridad - Hacer cada día una copia de seguridad de la base de datos y los archivos para evitar la pérdida de datos.
  • Mantenimiento - Limpiar y rotar los archivos de registro para optimizar el rendimiento del servidor.
  • Correo electrónico - Enviar boletines o notificaciones a usuarios o clientes.
  • Aplicaciones - Automatizar tareas específicas dentro de frameworks como WordPress o Laravel.
  • Monitorización - Realizar comprobaciones de estado (health checks) para controlar la situación de tu servidor o de tus aplicaciones.

Editar el crontab

Cada usuario tiene su propio crontab. Ábrelo con:

crontab -e

Esto abre tu crontab personal en el editor predeterminado. Las tareas cron de todo el sistema se encuentran en:

/etc/crontab
/etc/cron.d/

Entender la sintaxis de cron

Una línea de cron consta de 5 campos de tiempo más el comando:

* * * * * commando
| | | | |
| | | | +-- Día de la semana (0-7, 0 y 7 = domingo)
| | | +---- Mes (1-12)
| | +------ Día del mes (1-31)
| +-------- Hora (0-23)
+---------- Minuto (0-59)

Caracteres especiales

  • * - Cualquier valor
  • , - Varios valores (por ejemplo, 1,3,5)
  • - - Rango (por ejemplo, 1-5)
  • / - Intervalos (por ejemplo, */5 = cada 5 minutos)

Ejemplos explicados

# Diariamente a las 03:00
0 3* * * /pad/naar/script.sh

# Cada hora en punto
0 * * * * /pad/naar/script.sh

# Cada 5 minutos
*/5* * * * /pad/naar/script.sh

# De lunes a viernes a las 08:30
30 8* * 1-5 /pad/naar/script.sh

# Los días 1 y 15 de cada mes a medianoche
0 0 1,15* * /pad/naar/script.sh

# Todos los domingos a las 04:00
0 4* * 0 /pad/naar/script.sh

Crear tareas cron

Ejemplo: copia de seguridad de la base de datos

crontab -e

# Dagelijkse MySQL backup om 03:00
0 3* * * mysqldump -u root -pWACHTWOORD database > /backups/db_$(date +\%Y\%m\%d).sql

Atención: en el crontab, el carácter % debe escaparse como \% para evitar errores de sintaxis.

Ejemplo: limpieza de archivos de registro

# Wekelijks logs ouder dan 30 dagen verwijderen (zondag 05:00)
0 5 * * 0 find /var/log -name "*.log" -mtime +30 -delete

Ejemplo: ejecutar un script PHP

# Elke 15 minuten PHP cron script*/15 * * * * /usr/bin/php /var/www/site/cron.php

Usa siempre la ruta completa del ejecutable de PHP para evitar errores.

Tareas cron para aplicaciones web

WP-Cron de WordPress

WordPress tiene un sistema de cron integrado que no siempre es fiable cuando hay poco tráfico. Es recomendable pasar a tareas cron reales:

  1. Añade a wp-config.php la siguiente línea:
  2. define('DISABLE_WP_CRON', true);
  3. Crea una entrada en el crontab:
  4. */5* * * * /usr/bin/php /var/www/wordpress/wp-cron.php

Laravel Scheduler

Laravel tiene un potente programador de tareas (scheduler) que debe ejecutarse cada minuto para lanzar las tareas programadas:

* * * * * cd /var/www/laravel && php artisan schedule:run >> /dev/null 2>&1

Salida y registro

Enviar la salida a un archivo

0 3 * * * /pad/naar/script.sh >> /var/log/mijn-cron.log 2>&1
  • >> - Añade la salida al final del archivo
  • 2>&1 - Redirige los errores al mismo archivo

Enviar la salida por correo

De forma predeterminada, cron envía la salida por correo al usuario. Para indicar una dirección de correo concreta:

MAILTO=admin@example.nl
0 3* * * /pad/naar/script.sh

O para suprimir toda la salida:

0 3 * * * /pad/naar/script.sh > /dev/null 2>&1

Gestionar el crontab

Ver todas las tareas cron

crontab -l

Tareas cron de otro usuario

sudo crontab -l -u www-data

Eliminar el crontab

crontab -r

Atención: esto elimina TODAS las tareas cron de ese usuario, así que ten cuidado.

Consultar los registros de cron

Para comprobar si las tareas cron se están ejecutando, consulta los registros:

# Debian/Ubuntu
grep CRON /var/log/syslog

# CentOS/RHEL
tail -f /var/log/cron

Errores frecuentes

El script funciona a mano, pero no como tarea cron

Las variables de entorno son distintas en cron. Usa siempre rutas completas:

# Fout
0 3* * * script.sh

# Goed
0 3 * * * /usr/local/bin/script.sh

Definir el PATH en el crontab

Si dependes de determinados comandos, define el PATH:

PATH=/usr/local/bin:/usr/bin:/bin
0 3* * * script.sh

Permisos

Asegúrate de que los scripts sean ejecutables:

chmod +x /pad/naar/script.sh

Más información sobre los servidores VPS de Theory7

¿Necesitas ayuda?

Estamos a tu disposición. ¿Te has quedado atascado o tienes alguna pregunta? Nuestro equipo de soporte te ayuda personalmente. Envíanos un mensaje a través del sistema de tickets: solemos responder en unas pocas horas y buscamos contigo la mejor solución.