Configurar tareas cron: automatización en tu servidor
¿Quieres automatizar tareas en tu servidor? Entonces configurar tareas cron es una de las primeras habilidades que debes dominar como administrador de servidores o desarrollador web. Las tareas cron son tareas programadas que se ejecutan automáticamente en momentos fijos, sin que tengas que estar presente. En esta guía completa aprenderás todo sobre cómo configurar tareas cron en tu servidor Linux: desde la sintaxis básica hasta las aplicaciones avanzadas y las buenas prácticas.
¿Qué son las tareas cron y por qué deberías aprender a configurarlas?
Una tarea cron es una tarea programada en un sistema Linux o Unix que el daemon cron ejecuta automáticamente. El nombre cron viene de la palabra griega chronos, que significa tiempo. Al configurar tareas cron puedes automatizar tareas repetitivas, como hacer copias de seguridad, enviar informes, limpiar archivos de registro y ejecutar scripts de mantenimiento.
Tanto si administras un servidor VPS como si usas hosting web, las tareas cron son una parte esencial de la administración profesional de servidores. Te ahorran tiempo, evitan errores humanos y garantizan que las tareas importantes se ejecuten siempre a tiempo.
Ventajas de las tareas cron
- Automatización: las tareas se ejecutan automáticamente, sin intervención humana y en el momento que quieras
- Fiabilidad: las tareas cron nunca se olvidan ni se omiten, a diferencia de las tareas manuales
- Ahorro de tiempo: las configuras una sola vez y tus tareas se ejecutan siempre de forma automática a las horas programadas
- Coherencia: cada ejecución es idéntica, lo que evita los errores debidos a variaciones manuales
- Flexibilidad: programa tareas cada minuto, cada hora, cada día, cada semana o cada mes, en cualquier combinación
- Procesamiento nocturno: las tareas pesadas se ejecutan en horas de poca actividad, cuando el servidor tiene poca carga
Configurar tareas cron: la sintaxis básica explicada
Antes de poder configurar tareas cron, debes entender la sintaxis de crontab. Cada línea de una tarea cron consta de cinco campos de tiempo seguidos del comando que se va a ejecutar. Los cinco campos determinan cuándo se ejecuta el comando.
| Campo | Valor | Rango | Descripción |
|---|---|---|---|
| Minuto | 0-59 | Cada minuto dentro de la hora | En qué minuto se inicia el comando |
| Hora | 0-23 | Cada hora del día | A qué hora se ejecuta el comando |
| Día del mes | 1-31 | Cada día del mes | En qué día del mes |
| Mes | 1-12 | Cada mes del año | En qué mes se ejecuta el comando |
| Día de la semana | 0-7 | 0 y 7 son domingo | En qué día de la semana se ejecuta el comando |
Caracteres especiales en la sintaxis de crontab
Además de los valores numéricos, puedes usar caracteres especiales en la definición de tu tarea cron para crear programaciones más complejas:
- Asterisco *: significa cualquier valor posible para ese campo, es decir, cada hora, cada día, etc.
- Coma ,: separa varios valores, de modo que puedas programar, por ejemplo, los lunes y los viernes
- Guion -: define un rango de valores, por ejemplo 1-5 para de lunes a viernes
- Barra inclinada /: define un intervalo, por ejemplo */15 para cada 15 minutos
Configurar tareas cron en tu servidor Linux: paso a paso
Ahora que entiendes la sintaxis, vamos a configurar tareas cron de verdad en tu servidor Linux. Sigue estos pasos para configurar y probar con éxito tu primera tarea cron.
Paso 1: abre el editor de crontab
Inicia sesión en tu servidor por SSH y abre el editor de crontab con el comando crontab -e. Esto abre el crontab del usuario actual en el editor de texto predeterminado. Si quieres configurar tareas cron que se ejecuten como root, usa sudo crontab -e.
Paso 2: escribe la línea de tu tarea cron
Añade una línea nueva al final del archivo. Cada parte de la línea define cuándo y qué se debe ejecutar. Asegúrate de usar la ruta completa a los comandos y a los scripts, porque las tareas cron se ejecutan en un entorno mínimo, sin la variable PATH estándar.
Paso 3: guarda y comprueba
Guarda el archivo y cierra el editor. El daemon cron carga la nueva configuración automáticamente. Comprueba tus tareas cron activas con el comando crontab -l, que muestra todas las tareas programadas del usuario actual.
Ejemplos prácticos de tareas cron
- Copia de seguridad diaria de la base de datos a las 3 de la madrugada: programa un comando mysqldump que cada noche a las 03:00 haga una copia de seguridad completa de tu base de datos y la comprima con gzip
- Limpieza semanal de archivos de registro: elimina cada domingo a medianoche los archivos de registro con más de 30 días de antigüedad para liberar espacio en disco
- Vaciar la caché cada hora: elimina cada hora en punto los archivos de caché de tu aplicación para garantizar contenido actualizado
- Comprobación diaria del certificado SSL: comprueba cada mañana a las 06:00 si tus certificados SSL están a punto de caducar y envía una advertencia
- Comprobación de estado cada 5 minutos: comprueba cada 5 minutos si tu servidor web responde y reinícialo automáticamente si hay problemas
Configurar tareas cron para copias de seguridad: guía completa
Una de las aplicaciones más habituales de las tareas cron es automatizar las copias de seguridad. Configurar tareas cron para las copias de seguridad garantiza que tus datos estén siempre a salvo, sin que tengas que acordarte de hacerlo manualmente. Esto es esencial para cualquier servidor de producción.
Tarea cron para la copia de seguridad de la base de datos
Automatizar las copias de seguridad de la base de datos es una de las primeras cosas que debes hacer en cualquier servidor de producción. Un buen esquema de copias de seguridad hace cada día un volcado completo de tu base de datos, lo comprime y conserva las copias de seguridad de los últimos 7 a 30 días. Usa mysqldump para bases de datos MySQL y MariaDB, o pg_dump para bases de datos PostgreSQL.
Tarea cron para la copia de seguridad del sistema de archivos
Además de las copias de seguridad de la base de datos, también debes hacer copias de seguridad periódicas de tus archivos, tus configuraciones y los datos de tu página web. Usa rsync para copias de seguridad incrementales, que solo copian los archivos modificados, o tar para archivos comprimidos completos. Programa estas copias de seguridad en las horas nocturnas, cuando el tráfico de tu servidor es mínimo.
Configurar la rotación de copias de seguridad
Es importante configurar un sistema de rotación para que las copias de seguridad antiguas se eliminen automáticamente y no se llene tu espacio en disco. Un esquema habitual es conservar las copias de seguridad diarias durante 7 días, las semanales durante 4 semanas y las mensuales durante 12 meses.
Configurar tareas cron para el mantenimiento del servidor
Además de las copias de seguridad, las tareas cron son esenciales para automatizar el mantenimiento periódico del servidor. Al automatizar estas tareas, mantienes tu servidor sano, con buen rendimiento y seguro, sin intervención manual diaria.
Actualizaciones automáticas
Configura una tarea cron que compruebe e instale cada día las actualizaciones de seguridad. En Ubuntu y Debian puedes configurar y activar unattended-upgrades mediante una tarea cron. En CentOS y AlmaLinux usas yum-cron o dnf-automatic para el mismo fin.
Gestión de los archivos de registro
Los archivos de registro pueden crecer rápidamente y ocupar todo tu espacio en disco si no los gestionas. Aunque logrotate es la herramienta estándar para la rotación de registros, puedes configurar tareas cron adicionales para comprimir, archivar o eliminar registros de aplicaciones concretas según su antigüedad o su tamaño.
Monitorización y alertas
Configura tareas cron que comprueben con regularidad el estado de tu servidor. Supervisa el espacio en disco, el uso de memoria, la carga de la CPU y la disponibilidad de los servicios críticos. Envía advertencias automáticas por correo electrónico cuando se superen los umbrales.
| Tarea de mantenimiento | Frecuencia | Descripción |
|---|---|---|
| Actualizaciones de seguridad | Todos los días a las 04:00 | Comprueba e instala los parches de seguridad disponibles |
| Copia de seguridad de la base de datos | Todos los días a las 03:00 | Volcado completo de la base de datos con compresión |
| Copia de seguridad de archivos | Todos los días a las 03:30 | Copia de seguridad incremental de archivos y configuraciones |
| Rotación de registros | Cada semana, el domingo a las 00:00 | Comprime y archiva los archivos de registro antiguos |
| Limpieza de la caché | Todos los días a las 05:00 | Elimina los archivos de caché caducados |
| Comprobación del espacio en disco | Cada 6 horas | Comprueba el espacio en disco disponible y avisa si queda menos del 10 % |
| Comprobación de estado de los servicios | Cada 5 minutos | Comprueba que todos los servicios críticos estén activos |
Configurar tareas cron para aplicaciones web
Las aplicaciones web modernas suelen necesitar tareas programadas para procesar colas, enviar correos programados, generar informes y limpiar datos caducados. Por eso configurar tareas cron para tu aplicación web es esencial.
Programador de tareas de Laravel
Si usas Laravel, puedes usar el programador de tareas (scheduler) integrado. Entonces solo tienes que configurar una única tarea cron que llame al scheduler de Laravel cada minuto. El scheduler determina después qué tareas deben ejecutarse y cuándo, según tu configuración PHP. Es una forma elegante y manejable de organizar las tareas cron.
Tareas cron de WordPress
WordPress tiene su propio sistema de pseudo-cron, llamado wp-cron, que ejecuta tareas cuando alguien visita la página web. Para una ejecución más fiable, puedes desactivar wp-cron y configurar una tarea cron real del sistema que llame a wp-cron.php a horas fijas. Así te aseguras de que las entradas programadas, los correos y las actualizaciones se procesen siempre a tiempo.
Workers de cola y tareas en segundo plano
Muchas aplicaciones usan sistemas de colas para procesar tareas de forma asíncrona. Aunque los workers de cola suelen ejecutarse como procesos en segundo plano, puedes usar tareas cron para comprobar si el worker de cola está activo y reiniciarlo automáticamente si no lo está.
Errores habituales al configurar tareas cron
Al configurar tareas cron se cometen con frecuencia errores que provocan un comportamiento inesperado o que las tareas no se ejecuten. Estos son los errores más habituales y cómo evitarlos.
- No usar la ruta completa: las tareas cron se ejecutan en un entorno mínimo. Usa siempre la ruta completa a los ejecutables, como /usr/bin/php en lugar de solo php
- No redirigir la salida: sin redirección de la salida, cada tarea cron genera un correo electrónico que puede inundar tu bandeja de entrada. Redirige la salida a un archivo de registro o a /dev/null
- Permisos incorrectos: asegúrate de que el script sea ejecutable y de que el usuario de cron tenga los permisos adecuados para ejecutarlo
- Confusión con la zona horaria: cron usa por defecto la zona horaria del sistema. Comprueba tu zona horaria con timedatectl para evitar sorpresas
- Ejecuciones solapadas: si una tarea tarda más que el intervalo, pueden ejecutarse varias instancias a la vez. Usa flock o un pidfile para evitarlo
- Faltan variables de entorno: las tareas cron no heredan el entorno de tu shell. Define las variables necesarias al principio de tu crontab o en el propio script
Configurar tareas cron: consejos avanzados y buenas prácticas
Además de lo básico, existen técnicas avanzadas que hacen que configurar tareas cron sea más profesional y fiable en tus servidores de producción.
Registro y monitorización de las tareas cron
Asegúrate de que cada tarea cron registre su salida en un archivo, para poder comprobar después si la tarea se ha ejecutado correctamente. Añade marcas de tiempo a tus archivos de registro y configura alertas para las ejecuciones fallidas. Herramientas como cronitor o healthchecks.io pueden avisarte cuando una tarea cron no se haya ejecutado a tiempo.
Usar flock para el bloqueo
Usa el comando flock para evitar que varias instancias de la misma tarea cron se ejecuten a la vez. Flock coloca un bloqueo de archivo que impide que arranque una segunda instancia mientras la primera siga activa. Es esencial para las tareas que no pueden ejecutarse de forma concurrente.
Gestión de errores en los scripts de las tareas cron
Incorpora gestión de errores en tus scripts para que los problemas se detecten y se comuniquen. Comprueba el código de salida del comando y envía notificaciones cuando haya errores. Un script de tarea cron bien escrito detecta los errores, los registra y los comunica al administrador para que los problemas se resuelvan rápidamente.
Preguntas frecuentes sobre cómo configurar tareas cron
¿Funcionan las tareas cron también en hosting compartido?
Sí, la mayoría de los proveedores de hosting web ofrecen una interfaz de tareas cron en el panel de control. La funcionalidad puede ser más limitada que en un VPS, pero para tareas básicas, como llamar a scripts PHP, es suficiente. En un servidor VPS tienes control total sobre crontab.
¿Cómo compruebo si mi tarea cron se está ejecutando realmente?
Revisa el archivo de registro de cron, que suele encontrarse en /var/log/cron o /var/log/syslog. También puedes configurar una tarea cron de prueba que cree un archivo o escriba un mensaje en un archivo de registro para verificar que cron funciona correctamente.
¿Puedo configurar una tarea cron que se ejecute cada 30 segundos?
Cron admite como mínimo un intervalo de un minuto. Para tareas que deban ejecutarse con más frecuencia, puedes configurar dos tareas cron, de modo que la segunda tenga un sleep de 30 segundos. Una alternativa es usar un timer de systemd o un proceso en segundo plano para intervalos inferiores a un minuto.
¿Cuál es la diferencia entre crontab y /etc/cron.d?
Crontab es la configuración de tareas cron por usuario, que editas con crontab -e. El directorio /etc/cron.d contiene archivos de tareas cron para todo el sistema, que colocan los paquetes de software e incluyen un campo de usuario adicional para indicar con qué usuario debe ejecutarse el comando.
Configurar tareas cron es una habilidad fundamental para cualquiera que administre un servidor. Desde copias de seguridad sencillas hasta complejas cadenas de automatización, las tareas cron permiten que tu servidor funcione de forma fiable y eficiente sin intervención manual constante. Empieza con las tareas básicas, como las copias de seguridad y el mantenimiento, y amplía tu automatización poco a poco a medida que ganes experiencia. Consulta nuestra oferta de hosting VPS para servidores en los que tienes control total sobre las tareas cron, o elige hosting web con funciones de cron integradas.
Errores habituales al configurar tareas cron
Al configurar tareas cron, muchos administradores cometen los mismos errores. El error más habitual es usar rutas relativas en los comandos de cron. Como cron se ejecuta en un entorno mínimo, sin las variables PATH habituales, siempre debes usar rutas absolutas. Escribe, por ejemplo, /usr/bin/php /var/www/html/cron.php en lugar de php cron.php. Así evitas que tu tarea cron falle en silencio, sin ningún mensaje de error.
Un segundo error frecuente es olvidarse de redirigir la salida de las tareas cron. Por defecto, cron intenta enviar la salida por correo electrónico, lo que puede causar problemas si tu servidor de correo no está bien configurado. Añade > /dev/null 2>&1 al final de tu comando de cron si no necesitas la salida, o redirígela a un archivo de registro con >> /var/log/mijn-cron.log 2>&1 para analizarla más adelante.
Por último, muchos administradores se olvidan de comprobar la configuración de la zona horaria de su servidor. Las tareas cron se ejecutan según la hora del servidor, que puede diferir de tu hora local. Comprueba la zona horaria con el comando timedatectl y ajústala si es necesario. Esto es especialmente importante en las tareas que deben ejecutarse a horas concretas, como las copias de seguridad diarias a medianoche.
Monitorización y registro de las tareas automatizadas
Una monitorización eficaz es esencial al configurar tareas cron en tu servidor. Sin monitorización, no sabes si tus tareas automatizadas se ejecutan correctamente o si fallan en silencio. Implementa un sistema de registro que anote cuándo empieza y cuándo termina cada tarea cron y qué código de salida devuelve. Un código de salida 0 significa éxito, mientras que cualquier otro valor indica un error.
Plantéate usar un servicio de monitorización externo, como las herramientas de monitorización de servidores, para las tareas cron críticas. Estos servicios esperan una señal de tu servidor a horas fijas y te avisan si la señal no llega. Esto es especialmente valioso para las tareas de copia de seguridad y los análisis de seguridad, que no deben fallar sin que nadie se dé cuenta.
Mantén tus archivos de registro manejables configurando la rotación de registros. Sin rotación, los archivos de registro crecen sin límite y acaban llenando tu espacio en disco. Configura logrotate para rotar semanalmente los archivos de registro de cron y conservarlos como máximo cuatro semanas. Así tienes historial suficiente para la resolución de problemas sin desperdiciar espacio en disco innecesariamente.
Automatización avanzada con tareas cron
Además de las tareas programadas sencillas, configurar tareas cron ofrece posibilidades de automatización avanzada. Puedes usar tareas cron para renovar automáticamente los certificados SSL mediante Let's Encrypt, realizar el mantenimiento de las bases de datos y recopilar métricas de rendimiento. Al combinar varias tareas de forma inteligente, creas un entorno de servidor totalmente automatizado que requiere un mantenimiento manual mínimo.
Una técnica potente es encadenar tareas cron: haz que un script se ejecute solo cuando el script anterior haya terminado correctamente. Para ello, usa la ejecución condicional con operadores && o escribe un script wrapper que gestione el orden y las dependencias. Es especialmente útil en procesos de varios pasos, como crear primero un volcado de la base de datos, comprimirlo y subirlo después a un almacenamiento externo.
Para necesidades de automatización más complejas, puedes plantearte pasar de las tareas cron tradicionales a programadores de tareas como los Systemd Timers. Ofrecen ventajas como la programación basada en eventos, una mejor integración del registro y la gestión de dependencias. Sin embargo, para la mayoría de los entornos de hosting, las tareas cron clásicas funcionan perfectamente, sobre todo si las combinas con una buena monitorización y una buena gestión de errores.
Un servidor bien automatizado te ahorra a largo plazo cientos de horas de trabajo manual. Invierte tiempo en configurar tareas cron correctamente y cosecharás los frutos durante años. Documenta todas tus tareas cron en un archivo ordenado, con el objetivo de cada tarea, el comportamiento esperado y la persona de contacto en caso de problemas. Esta documentación es imprescindible cuando un compañero se hace cargo de la administración o cuando, meses después, tienes que modificar una tarea existente.
Por último: prueba siempre tus tareas cron manualmente antes de programarlas. Ejecuta el comando manualmente en la terminal y comprueba que se obtiene el resultado esperado. Solo después lo añades al crontab. Este sencillo paso evita que una tarea cron mal configurada falle durante horas o días sin que nadie lo note. Con un enfoque estructurado de la automatización, tu servidor se convierte en una máquina fiable que trabaja para ti de día y de noche.