Configurar tareas cron: automatiza tareas en tu servidor
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:
- Añade a
wp-config.phpla siguiente línea: - Crea una entrada en el crontab:
define('DISABLE_WP_CRON', true);
*/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.
A 0 de 0 personas les ha resultado útil