Crontab en Linux: EJEMPLOS de programación de trabajos

⚡ Resumen inteligente

En Linux, Crontab programa comandos para que se ejecuten automáticamente en horas, fechas o intervalos fijos mediante el demonio cron, lo que permite a los administradores automatizar las copias de seguridad, la limpieza de registros, las notificaciones y el mantenimiento rutinario del sistema sin ninguna intervención manual.

  • ⏰ Demonio cron: El proceso en segundo plano cron lee los archivos crontab y ejecuta cada tarea programada en el minuto exacto que usted haya configurado.
  • 🗂️ Formato Crontab: Cinco campos de tiempo —minuto, hora, día del mes, mes y día de la semana— preceden al comando que se va a ejecutar.
  • ✍️ Trabajos de edición: Utilice crontab -e para agregar o modificar tareas, crontab -l para listarlas y crontab -r para eliminarlas.
  • 🔁 Cadenas especiales: Los atajos como @reboot, @daily, @weekly y @hourly reemplazan los cinco campos de tiempo para los horarios comunes.
  • ???? Ejemplos prácticos: Las entradas predefinidas cubren intervalos de cinco minutos, días específicos de la semana, ejecuciones mensuales y tareas de inicio.
  • 🤖 Asistencia de IA: Los asistentes de IA y GitHub Copilot pueden generar y explicar expresiones cron en segundos.

Crontab en la programación de tareas en Linux con ejemplos

Crontab, abreviatura de tabla cron, es el archivo de configuración y el comando que controla Linux Programación de tareas. Las secciones siguientes explican el formato de crontab, los comandos para agregar, listar y eliminar tareas, las cadenas especiales @ y ejemplos de programación listos para usar.

¿Qué es crontab?

Cron recibe su nombre de la palabra griega «Chronos», que significa tiempo. Es un proceso del sistema (un demonio) que ejecuta tareas automáticamente según un cronograma preestablecido. Cron es un conjunto de comandos que se utilizan para ejecutar tareas programadas regularmente. Crontab significa «tabla cron» y permite usar el programador de tareas cron para ejecutar dichas tareas.

Crontab es también el nombre del programa que se utiliza para editar esa programación. Se controla mediante un archivo crontab, un archivo de configuración que enumera los comandos de shell que se ejecutarán periódicamente según la programación especificada.

¿Por qué usar tareas programadas (Cron Jobs)?

Estas son las principales razones para usar tareas programadas (cron jobs) en Linux:

  • Realiza copias de seguridad programadas de archivos de registro o bases de datos.
  • Elimina automáticamente los archivos de registro antiguos.
  • Archielimina y purga las tablas de la base de datos.
  • Envía correos electrónicos de notificación, como boletines informativos o recordatorios de caducidad de contraseñas.
  • Realiza una limpieza periódica de los datos almacenados en caché.
  • Automatiza tareas repetitivas en sistemas Unix y Linux.
  • Automatiza el mantenimiento rutinario del sistema.

¿Cómo usar cron en Linux?

El paquete del sistema Linux incluye un útil planificador de tareas llamado crontab. Crontab es popular porque permite programar tareas para que se ejecuten como usuario root, lo que facilita la automatización de cambios en el sistema. Basta con modificar la tarea una vez y esperar a que se active de nuevo según lo programado.

Formato de crontab de Linux

Una entrada de crontab en Linux tiene seis campos. Los primeros cinco campos definen la hora y la fecha de ejecución, y el sexto campo contiene el comando que se va a ejecutar.

Sintaxis de crontab:

[Minute] [hour] 
[Day_of_the_Month] 
[Month_of_the_Year] 
[Day_of_the_Week] 
[command]

El diagrama que aparece a continuación relaciona cada asterisco de una entrada de crontab con el campo que controla, desde el minuto hasta el día de la semana, seguido del comando que se va a ejecutar.

Diagrama del formato crontab de Linux que muestra los cinco campos de tiempo y el comando

Los cinco campos de tiempo aceptan estos valores: minuto (0–59), hora (0–23), día del mes (1–31), mes (1–12 o enero–diciembre) y día de la semana (0–7, donde 0 y 7 significan domingo). Usted controla cada campo con estos caracteres especiales:

  • Asterisco (*): Coincide con todos los valores posibles para ese campo.
  • Defina un rango: Utilice un guion para establecer un rango, como 1-10, 30-40, enero-marzo o lunes-miércoles.
  • Definir múltiples rangos: Utilice comas para combinar rangos, como abr-jun,oct-dic.

Cómo agregar/modificar Crontab

Los usuarios pueden editar sus propias tareas de crontab con el siguiente comando de crontab. La opción -u se dirige al crontab de un usuario específico, así que proporcione el nombre de usuario como se muestra en los ejemplos posteriores:

$ crontab -u -e 

El comando anterior abre la configuración personal de crontab para su sistema, que puede editar con su editor de texto predeterminado.

No es necesario reiniciar cron; detecta los cambios automáticamente. Para ver sus tareas actuales, utilice:

$ crontab -l

Para eliminar las tareas de crontab, utilice el siguiente comando:

$ crontab -r

Para agregar o actualizar una tarea en el crontab, utilice el siguiente comando:

crontab -e

Para editar el crontab de otro usuario, nombre al usuario con la opción -u:

crontab -u username -e

Cómo listar Crontab

Para ver las entradas de crontab del usuario actual:

crontab -l

Para ver las entradas de crontab de un usuario específico:

crontab -u username -l

Ejemplos importantes de Crontab

Aquí tienes algunos ejemplos importantes y listos para usar de programaciones con crontab:

Mareas Ideales para Lecciones Comando
Ejecuta las distintas tareas programadas. El siguiente comando se ejecuta diariamente a las 7:00 y a las 17:00.
0 7,17 * * * /scripts/script.sh
Ejecuta una tarea programada (cron job) cada 5 minutos.
*/5* * * * *  /scripts/script.sh
Ejecuta la tarea cada Monday a las 5 de la mañana. Esto es útil para tareas semanales como la limpieza del sistema.
0 5 * * mon  /scripts/script.sh
Ejecuta tu script a intervalos de 3 minutos.
*/3 * * * * /scripts/monitor.sh
Programa una tarea cron que se ejecuta en meses específicos; en este caso, febrero, junio y septiembre.
* * * feb,jun,sep *  /script/script.sh
Se ejecuta en días seleccionados. Este ejemplo se ejecuta cada Monday y miércoles a las 5 h.
0 17 * * mon,wed  /script/script.sh
Permite que cron se ejecute el primer sábado de cada mes.
0 2 * * sat  [ $(date +%d) -le 06 ] && /script/script.sh
Ejecuta un script a intervalos de 6 horas, configurado como se indica a continuación.
0 */6 * * * /scripts/script.sh
Programa una tarea para que se ejecute dos veces. Monday y martes. Utilice la siguiente configuración para hacerlo.
0 4,17 * * mon,tue /scripts/script.sh
Programa una tarea cron para que se ejecute cada 15 segundos.
* * * * * /scripts/script.sh
* * * * *  sleep 15; /scripts/script.sh
Programa tareas anualmente. @yearly es similar a “0 0 1 1 *”. Ejecuta la tarea una vez al año a medianoche del 1 de enero, lo cual resulta útil para los saludos de Año Nuevo.
@yearly /scripts/script.sh 
Ejecuta tareas mensualmente. @monthly es similar a “0 0 1 * *”. Ejecuta la tarea a medianoche del primer día de cada mes.
@monthly /scripts/script.sh
Ejecuta múltiples tareas utilizando una única entrada de cron.
* * * * * /scripts/script.sh; /scripts/scrit2.sh
Programa tareas semanalmente. @weekly es similar a “0 0 * * 0”. Ejecuta tareas semanales como la limpieza del sistema a medianoche todos los domingos.
@weekly /bin/script.sh
Programa tareas diariamente. @daily es similar a “0 0 * * *”. Ejecuta la tarea una vez al día a medianoche.
@daily /scripts/script.sh
Ejecuta las tareas cada hora. @hourly es similar a “0 * * * *”. Ejecuta la tarea al comienzo de cada hora.
@hourly /scripts/script.sh
Ejecuta tareas al reiniciar el sistema. La anotación @reboot es útil para tareas que el sistema debería ejecutar al iniciar, permitiendo que los trabajos en segundo plano se inicien automáticamente.
@reboot /scripts/script.sh

Preguntas Frecuentes

Los crontabs de usuario se almacenan en /var/spool/cron/ (o /var/spool/cron/crontabs/ en Debian y Ubuntu), mientras que la programación global del sistema reside en /etc/crontab y en el directorio /etc/cron.d. Edite siempre los crontabs de usuario con crontab -e en lugar de abrir esos archivos directamente.

Cron ejecuta las tareas solo en el momento exacto programado y las omite si la máquina está apagada. Anacron tracks elimina las tareas pendientes y las ejecuta una vez que el sistema se reinicia, por lo que resulta adecuado para portátiles y ordenadores de sobremesa que no están siempre encendidos.

Cron utiliza un entorno mínimo, por lo que una variable PATH limitada suele ser la causa. Utilice rutas absolutas para los comandos y scripts, haga que el script sea ejecutable y redirija la salida a un archivo de registro para poder capturar cualquier error y depurarlo.

Agregue >> /ruta/al/archivo/de/registro 2>&1 al comando para capturar la salida estándar y los errores en un archivo. Como alternativa, configure la variable MAILTO en la parte superior del crontab para que cron envíe por correo electrónico la salida de cada tarea a esa dirección.

Los archivos /etc/cron.allow y /etc/cron.deny controlan el acceso. Si existe cron.allow, solo los usuarios que aparecen en él pueden usar crontab. Si solo existe cron.deny, todos los usuarios, excepto los que aparecen en la lista, pueden programar tareas.

Un crontab de usuario creado con crontab -e tiene cinco campos de tiempo seguidos del comando. El archivo del sistema /etc/crontab agrega un campo que nombra al usuario que ejecuta la tarea, con el siguiente texto: minuto, hora, día, mes, día de la semana, usuario y, a continuación, comando.

Sí. Las herramientas de aprendizaje automático pueden establecer tiempos de ejecución y finalización de tareas normales, y luego detectar anomalías como tareas que tardan demasiado, fallan silenciosamente o no cumplen con su horario. El análisis de registros mediante IA también agrupa los errores relacionados para acelerar la identificación de la causa raíz.

Sí. Copiloto de GitHub Puede generar expresiones cron a partir de un comentario en lenguaje natural, explicar qué hace una programación como */5 * * * * y redactar el script de shell que ejecuta una tarea. Pruebe siempre la expresión antes de añadirla a un crontab de producción.

Resumir este post con: