Linux: ¿cómo programar tareas con cron y crontab?
Table of Contents
I. Introducción
En Linux, las tareas programadas suelen ejecutarse a través de las denominadas tareas Cron, definidas en el archivo de configuración Crontab. Esta es otra forma de automatizar tareas en una máquina Linux. Permite programar tareas para que se ejecuten en momentos específicos o a intervalos regulares, lo que simplifica la automatización en Linux.
En este artículo, exploraremos el uso de Crontab, comenzando con una mirada a su sintaxis y luego pasando a ejemplos concretos de su uso. El objetivo es que te sientas cómodo con la programación de tareas en Linux después de leer este tutorial.
II. ¿Qué es Crontab?
Cron es una herramienta de Linux que ejecuta tareas programadas ("cron jobs") a horas específicas. Se ejecuta en segundo plano en la máquina Linux y ejecutará las tareas definidas en un archivo llamado crontab (abreviatura de "tabla cron"), específico para cada usuario. Así, hay un crontab para el superusuario root, así como para otros usuarios del sistema (que utilizaremos cuando sea necesario).
Con crontab, cada usuario puede programar comandos y scripts para que se ejecuten en fechas y horas definidas. Es posible ejecutar una tarea a una hora específica o con una frecuencia determinada: cada 5 minutos, a las 04:00 a.m. todos los días, o cada dos días. La sintaxis de crontab, que veremos más adelante, hace que el sistema sea extremadamente flexible.
El administrador del sistema puede definir tareas programadas globales en /etc/crontab
o /etc/cron.d/
. La dirección /etc/crontab
es un archivo de sistema generado automáticamente por Linux. También leerá archivos en los siguientes directorios: /etc/cron.hourly
/etc/cron.daily
, /etc/cron.weekly
y /etc/cron.monthly
.
Hay varios comandos que necesitas conocer para manejar trabajos cron en una máquina Linux:
# editar la crontab del usuario actual
crontab -e
# mostrar la crontab actual
crontab -l
# eliminar la crontab del usuario
crontab -r
# listar la crontab del usuario "flo"
crontab -u flo -l
Si se encuentra con una máquina en la que cron no está disponible, es posible instalarlo y activarlo:
sudo apt update && sudo apt install cron
sudo systemctl enable cron
III. Sintaxis de Crontab
Antes de considerar la posibilidad de editar el crontab de un usuario, debe tomarse el tiempo necesario para comprender la sintaxis implicada. En este archivo, cada línea corresponde a una tarea programada diferente. Entonces, cada línea del crontab sigue una sintaxis bien definida con varias columnas :
* * * * * <comando a ejecutar>
| | | | |
| | | | ----- Día de la semana (0 - 7) [donde 0 y 7 = domingo]
| | | ------- Mes (1 - 12)
| | --------- Día del mes (1 - 31)
| ----------- Hora (0 - 23)
------------- Minuto (0 - 59)
Tenga en cuenta que el asterisco"*" significa"todas las ocurrencias posibles". Por lo tanto, si pone un"*" en la tercera columna, el comando se ejecutará todos los días del mes.
En general, hay varios caracteres especiales que puede utilizar para afinar los horarios:
*
todos los valores posibles.,
varios valores posibles (por ejemplo :1,15
significa 1º y 15º).-
intervalo (por ejemplo :1-5
significa de 1ª a 5ª)./
incremento (por ejemplo :*/10
cada 10 unidades, es decir, cada 10 minutos, si se introduce en la columna de minutos).
También hay entradas especiales que son como alias para facilitar la escritura de determinadas frecuencias:
@reboot
al arrancar.@hourly
cada hora.@daily
todos los días.@weekly
cada semana.@monthly
cada mes.@yearly
cada año.
IV. Ejemplos de uso de Crontab
Ahora vamos a ver algunos ejemplos de uso de crontab para empezar. Esto le permitirá planificar la tarea de su elección. Esto también le proporcionará detalles adicionales sobre cómo funciona crontab.
A. Ejecutar un script Bash todos los días a medianoche
Para ejecutar un script Bash todos los días a medianoche, por ejemplo, un script de copia de seguridad, podemos configurar una tarea programada en el crontab. Empieza por editar el crontab de tu usuario:
crontab -e
La primera vez que vayas a editar el crontab, se te pedirá que selecciones el editor de texto con el que realizar la edición. Nano es la solución más sencilla, que puedes seleccionar escribiendo"1" y luego Intro.

Llega a un archivo con un bloque de comentarios. Explica la sintaxis de crontab en pocas palabras. Todo lo que tienes que hacer es declarar tu tarea programada, así para ejecutarla todos los días a medianoche :
0 0 * * * /home/flo/scripts/backup.sh
Lo que da:

Simplemente guarda el crontab con"CTRL + O" si estás usando Nano. Recuerde hacer el script Bash ejecutable, de lo contrario no se ejecutará.
Por defecto, la salida estándar (stdout
) y la salida de error (stderr
) de los comandos ejecutados mediante crontab se envían por correo electrónico al usuario propietario del crontab. Así, la línea anterior, aunque funcional, puede mejorarse jugando con la redirección de la salida de cron.
- Haga que la tarea programada sea silenciosa redirigiendo la salida en
/dev/null
.
0 0 * * * /home/flo/scripts/backup.sh > /dev/null 2>&1
- Redirige la salida estándar a un archivo de registro.
0 0 * * * /home/flo/scripts/backup.sh >> backup.log
- Redirige la salida estándar y los errores a un archivo de registro.
0 0 * * * /home/flo/scripts/backup.sh >> backup.log 2>&1
B. Purgar una carpeta automáticamente
Si necesita limpiar (purgar) automáticamente un directorio, puede hacerlo mediante un crontab. El ejemplo siguiente purgará el directorio /home/flo/tmp
todos los lunes a las 06.00 horas.
0 6 * * 1 /usr/bin/rm -rf /home/flo/tmp/*
Cuando ejecute un binario con una tarea cron, es conveniente especificar la ruta completa, como se muestra a continuación /usr/bin/rm
. Puede obtener esta información fácilmente con whereis
:
whereis rm
C. Enviar una alerta de reinicio por correo electrónico
Un script puede ser configurado para notificar a un administrador cuando el servidor Linux se reinicia. En este caso, podemos utilizar el alias @reboot para facilitar la escritura de nuestra línea cron.
@reboot echo "El servidor se reinició el $(date '+%Y-%m-%d a las %H:%M:%S')" | mail -s "Alerta de reinicio del servidor IT-Connect" admin-demo@it-connect.fr
D. Una variedad de frecuencias de ejecución
Al crear una tarea programada, la clave reside en utilizar la sintaxis adecuada para programar la tarea correctamente y obtener el resultado esperado. Para ayudarte, aquí tienes algunos ejemplos más.
# Se ejecuta cada 5 minutos
*/5 * * * * <comando>
# Se ejecuta todos los domingos a las 22:15
15 22 * * 0 <comando>
# Se ejecuta todos los días laborables (lunes a viernes) a las 08:00
0 8 * * 1-5 <comando>
# Se ejecuta el primer día de cada mes a la medianoche
0 0 1 * * <comando>
# Se ejecuta cada dos días a las 03:00
0 3 */2 * * <comando>
# Se ejecuta del 1 al 10 de cada mes a las 03:00
0 3 1-10 * * <comando>
Si necesita ayuda para comprobar su sintaxis o simplemente generarla, hay dos sitios muy útiles que puede utilizar:
- crontab-generator.org Simplemente seleccione sus requisitos para la frecuencia de ejecución y la herramienta generará la línea crontab adecuada.
- crontab.guru Puedes especificar tu línea crontab (sin el comando) y la herramienta la traducirá a texto. Esto es muy útil para comprobar la sintaxis de su trabajo cron.


V. Conclusión
Ahora ya puedes entender para qué sirve crontab, cómo utilizarlo y cómo registrar las tareas que configures. Para programar tareas en Linux, también puedes usar el comando timers
de systemd
. Analizaremos este segundo método en un próximo artículo.
Si desea controlar y supervisar las tareas programadas de un conjunto de servidores, puede considerar una solución como Apache Airflow.