¿Cómo ejecutar un script de Python en un virtualenv usando crontab?

Publicado 17 de octubre de 2024

Problema: Ejecutar scripts de Python en un entorno virtual con Crontab

Ejecutar scripts de Python en un entorno virtual usando crontab puede ser difícil. El principal problema es que crontab no puede acceder directamente al entorno virtual, lo que puede causar errores de ejecución o comportamientos inesperados. Este problema suele ocurrir cuando se intenta automatizar scripts de Python que necesitan versiones específicas de paquetes o entornos aislados.

Ejecutar el script de Python en un entorno virtual

Método 1: Ejecución directa

Puedes ejecutar un script de Python en un entorno virtual usando crontab mediante la ejecución directa con el intérprete de Python del entorno virtual. Este método es simple y claro.

Para usar este enfoque, especifica la ruta completa al intérprete de Python dentro de tu entorno virtual en la entrada de crontab. Aquí tienes un ejemplo de una entrada de crontab:

0 9 * * * /ruta/al/entorno/virtual/bin/python /ruta/a/tu_script.py

Este trabajo cron se ejecutará todos los días a las 9:00 AM usando el intérprete de Python de tu entorno virtual.

Consejo: Verificar la ruta de Python

Antes de configurar el crontab, verifica la ruta al intérprete de Python de tu entorno virtual. Puedes hacer esto activando tu entorno virtual y ejecutando:

which python

Esto mostrará la ruta completa al intérprete de Python, que luego puedes usar en tu entrada de crontab.

Método 2: Script envolvente

Otro método utiliza un script envolvente que activa el entorno virtual antes de ejecutar tu script de Python. Este enfoque puede ser útil si necesitas configurar variables de entorno o realizar otras tareas antes de ejecutar tu script.

Para usar este método:

  1. Crea un script de shell (por ejemplo, ejecutar_script.sh) con este contenido:
#!/bin/bash
source /ruta/al/entorno/virtual/bin/activate
python /ruta/a/tu_script.py
deactivate
  1. Haz que el script de shell sea ejecutable:
chmod +x /ruta/a/ejecutar_script.sh
  1. Añade una entrada a tu crontab para ejecutar este script envolvente:
0 9 * * * /ruta/a/ejecutar_script.sh

Este método activa el entorno virtual, ejecuta tu script de Python y desactiva el entorno virtual cuando el script termina.

Ambos métodos te permiten ejecutar tus scripts de Python en un entorno virtual usando crontab, dándote la opción de elegir el enfoque que mejor se adapte a tus necesidades.