Volver a la página principal
viernes 14 febrero 2025
6

Cómo utilizar la librería python-crontab en Python

Si necesitas programar tareas automatizadas en un sistema basado en UNIX (Linux o macOS), el cron es una de las herramientas más utilizadas. Sin embargo, editar el crontab manualmente puede ser un poco tedioso. Afortunadamente, en Python existe la librería python-crontab, que nos permite manipular las tareas cron desde código de forma sencilla.

📌 Instalación de python-crontab

Para empezar, debes instalar la librería si aún no la tienes. Puedes hacerlo con el siguiente comando:

pip install python-crontab

Si estás en un entorno virtual, asegúrate de activarlo antes de instalar la librería.

🔹 ¿Qué es un crontab?

Antes de entrar en la implementación en Python, es importante entender qué es un crontab.

El crontab (tabla de cron) es un archivo que contiene una lista de comandos que se ejecutan en momentos específicos o de manera periódica. Cada línea de un crontab sigue este formato:

* * * * * comando_a_ejecutar
│ │ │ │ │
│ │ │ │ └── Día de la semana (0 - 6) [Domingo = 0]
│ │ │ └──── Mes (1 - 12)
│ │ └────── Día del mes (1 - 31)
│ └──────── Hora (0 - 23)
└────────── Minuto (0 - 59)

Ejemplo de una tarea cron que ejecuta un script cada día a las 3:00 AM:

0 3 * * * /usr/bin/python3 /ruta/del/script.py

Ahora, veamos cómo podemos manipular esto usando python-crontab.

🔥 Creando un crontab en Python

Para agregar una nueva tarea programada desde Python, usaremos la clase CronTab de python-crontab.

🛠️ Paso 1: Importar la librería

from crontab import CronTab

🛠️ Paso 2: Abrir el crontab del usuario actual

Si queremos modificar el crontab del usuario actual, hacemos lo siguiente:

cron = CronTab(user=True)

También podemos modificar el crontab de otro usuario con:

cron = CronTab(user='nombre_de_usuario')

🛠️ Paso 3: Crear un nuevo trabajo (tarea cron)

Para añadir un nuevo trabajo que ejecute un script de Python cada 5 minutos, podemos hacer lo siguiente:

job = cron.new(command='python3 /ruta/del/script.py')
job.minute.every(5)  # Ejecutar cada 5 minutos

Si quisiéramos que se ejecute todos los días a las 2:30 AM:

job.setall('30 2 * * *')

También podemos definirlo manualmente:

job.minute.on(30)
job.hour.on(2)

🛠️ Paso 4: Guardar los cambios en el crontab

Después de definir el trabajo, debemos escribirlo en el crontab:

cron.write()

Esto añadirá la nueva tarea al archivo de crontab del usuario. 🎯

🧐 Listar las tareas cron existentes

Si deseas ver todas las tareas programadas en tu crontab actual, puedes hacer lo siguiente:

for job in cron:
    print(job)

Esto imprimirá cada línea del crontab con su respectiva programación.

🗑️ Eliminar tareas del crontab

Si necesitas eliminar una tarea específica, puedes hacerlo filtrando por el comando:

for job in cron:
    if job.command == 'python3 /ruta/del/script.py':
        cron.remove(job)

cron.write()  # Guardar los cambios

También puedes eliminar todas las tareas de un crontab con:

cron.remove_all()
cron.write()

⚠️ ¡Ten cuidado con esto! Eliminará todas las tareas programadas en el crontab del usuario.

✅ Verificar si un trabajo ya existe

Para evitar duplicados, puedes verificar si una tarea ya está en el crontab antes de añadirla:

exists = any(job for job in cron if job.command == 'python3 /ruta/del/script.py')

if not exists:
    job = cron.new(command='python3 /ruta/del/script.py')
    job.minute.every(10)  # Cada 10 minutos
    cron.write()

📌 Obtener la próxima ejecución de un cronjob

Si quieres saber en cuánto tiempo se ejecutará la tarea nuevamente, puedes hacerlo así:

print(job.schedule().get_next())

Esto devolverá el tiempo en segundos hasta la próxima ejecución.

🛠️ Manejo de logs y depuración

Si necesitas verificar si las tareas cron se están ejecutando correctamente, puedes revisar los logs del sistema:

cat /var/log/syslog | grep CRON

En macOS, puedes revisar el log con:

grep CRON /var/log/system.log

Si tu tarea está programada pero no se ejecuta, asegúrate de que el path del script es correcto y de que el usuario tiene permisos para ejecutarlo.

🎯 Conclusión

La librería python-crontab es una excelente herramienta para manipular tareas cron directamente desde Python, sin necesidad de editar archivos manualmente. Con ella, puedes:

✅ Crear tareas cron fácilmente.

✅ Listar tareas programadas.

✅ Eliminar trabajos cron.

✅ Verificar la próxima ejecución de un cronjob.

Si trabajas con automatización en Linux o macOS, dominar python-crontab te ahorrará mucho tiempo y esfuerzo. 🚀

Etiquetas:
python
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer