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.
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.
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
.
Para agregar una nueva tarea programada desde Python, usaremos la clase CronTab
de python-crontab
.
from crontab import CronTab
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')
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)
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. 🎯
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.
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.
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()
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.
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.
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. 🚀
Jorge García
Fullstack developer