CodeGym /Cursos /Docker SELF /Automatización de tareas con cron y at

Automatización de tareas con cron y at

Docker SELF
Nivel 3 , Lección 5
Disponible

Automatización de tareas con cron y at

1. ¿Por qué es importante la automatización?

La automatización de tareas es básica para cualquier administrador de sistemas, especialmente en Linux. Imagina trabajar sin automatización: todas las mañanas abres la terminal y escribes el mismo comando para hacer copias de seguridad, archivarlas, enviarlas al servidor y limpiar logs antiguos. Después de una semana de esta rutina, probablemente te plantearías cambiar de trabajo... Pero no te preocupes, estamos aquí para enseñarte cómo hacer que la máquina sea tu mejor aliada.

La lección de hoy es pura magia de tiempo y tareas. Aprenderemos a automatizar procesos al nivel del sistema operativo utilizando las impresionantes herramientas cron y at. Estas utilidades ahorran un montón de tiempo y, a veces, también los nervios.

La automatización es un salvavidas para cualquier tarea rutinaria. Por ejemplo, tienes un script que genera un informe para tu jefe. Este informe se necesita todos los días a las 8:00. En vez de despertarte temprano para ejecutar el script manualmente (y arriesgarte a quedarte distraído con una taza de café y olvidarlo), puedes configurar cron para que realice esta tarea automáticamente.

cron es una herramienta para tareas regulares que se repiten a una hora específica.
at es una utilidad para tareas únicas que deben ejecutarse en un momento específico.


2. Trabajando con cron

¿Qué es cron?

cron es un demonio (proceso del sistema) que se ejecuta en segundo plano y realiza tareas programadas a una hora específica. Los horarios para estas tareas se almacenan en lo que se llama crontab, que son archivos de texto. Cada usuario en el sistema puede tener su propio crontab.

Tu primera tarea en cron

Así es como se ve un comando básico para trabajar con cron:

crontab -e

Este comando abre el crontab del usuario actual para edición. Puedes añadir tareas especificando un formato de horario.

Sintaxis del horario

Una línea en el crontab consta de seis campos:

* * * * * COMMAND
- - - - -
| | | | └─ Día de la semana (0–7, donde 0 y 7 son domingo)
| | | └── Mes (1–12)
| | └─── Día del mes (1–31)
| └──── Horas (0–23)
└───── Minutos (0–59)

Ejemplo: ejecuta echo "Hello, Linux" todos los días al mediodía:

0 12 * * * echo "Hello, Linux"

Práctica: lancemos una tarea simple

  1. Abre tu crontab para editar:

    crontab -e
    
  2. Añade esta línea:

    */5 * * * * echo "Hello, world! The time is $(date)" >> ~/cron_test.log
    

    Esta tarea añadirá una línea con la hora actual al archivo cron_test.log cada 5 minutos. Guarda el archivo y sal.

  3. Verifica si la tarea ha comenzado:

    tail -f ~/cron_test.log
    

    Después de 5 minutos deberías ver una entrada actualizada en el archivo.

Ver tareas programadas

Para verificar las tareas actuales:

crontab -l

Eliminar tareas

Para eliminar todas las tareas de crontab:

crontab -r

Ejemplos reales de uso de cron

Archivando archivos

Supongamos que deseas archivar los archivos del directorio /var/logs cada noche a las 3 de la mañana:

  1. Escribe un script:

    #!/bin/bash
    tar -czf /backup/logs_$(date +\%Y-\%m-\%d).tar.gz /var/logs
  2. Establece un horario en el crontab:

    0 3 * * * /path/to/script.sh
    

¡Y listo! Nunca más olvidarás hacer una copia de seguridad.

Notificación de carga del sistema

Por ejemplo, deseas recibir una notificación si la carga de la CPU supera el 80%:

  1. Escribe un script:

    #!/bin/bash
    LOAD=$(uptime | awk '{print $10}' | sed 's/,//')
    if (( $(echo "$LOAD > 0.80" | bc -l) )); then
        echo "High CPU load: $LOAD" | mail -s "CPU Alert" you@example.com
    fi
  2. Configura el horario:

    */10 * * * * /path/to/cpu_check.sh
    

3. Trabajando con at

at te permite ejecutar una tarea única en un momento específico. A diferencia de cron, las tareas en at no se repiten. Esto es útil para tareas del tipo "haz esto mañana a las 9 de la mañana".

Una tarea simple con at

Aquí tienes un ejemplo de cómo programar una tarea:

echo "echo '¡Hola, Linux!'" | at now + 1 minute

Este comando ejecutará el comando echo '¡Hola, Linux!' en un minuto.

Puedes especificar una hora y fecha exactas:

echo "echo '¡Copia de seguridad completada!'" | at 10:30 AM tomorrow

Gestionando tareas con at

Después de añadir una tarea, puedes ver la lista de tareas:

atq

Ejemplo de salida:

1   Tue Oct 31 10:30:00 2023 a user
2   Tue Oct 31 11:00:00 2023 a user

Para eliminar una tarea:

atrm <job_id>

Práctica: usando at para notificaciones

  1. Crea una tarea para notificar en 2 minutos:

    echo "notify-send '¡El tiempo se acabó!'" | at now + 2 minutes
    
  2. Revisa la lista de tareas:

    atq
    
  3. Espera que aparezca una ventana emergente en 2 minutos.


4. Errores típicos al trabajar con cron y at

Uno de los problemas más frecuentes es especificar una ruta incorrecta al script o comando. Recuerda que cron se ejecuta en un entorno mínimo, por lo que puede no reconocer tus variables, como PATH. La mejor práctica es usar rutas absolutas.

Por ejemplo, si quieres ejecutar un script de Python:

*/30 * * * * /usr/bin/python3 /path/to/script.py

Asegúrate también de que el script tiene permisos de ejecución:

chmod +x /path/to/script.sh

¿Dónde se puede utilizar?

Las habilidades de automatización se necesitan en casi todas las profesiones relacionadas con IT. Puedes utilizar este conocimiento:

  • Para automatizar tareas rutinarias del sistema.
  • Para configurar backups periódicos.
  • Para monitorizar el estado de servidores.
  • En entrevistas, donde suelen preguntar sobre cron y automatización.

Si trabajas en DevOps, administración de sistemas o simplemente quieres ser más productivo, entender cron y at te ayudará a destacar y ahorrar mucho tiempo.

Ahora ya sabes cómo hacer que Linux trabaje para ti. La próxima vez que alguien se queje de tareas rutinarias, simplemente sonríe, porque tú eres un maestro de la automatización.

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION