¿Cómo ejecutar comandos de administración de Django desde Cron con Virtualenv?

Publicado 8 de septiembre de 2024

Problema: Ejecutar comandos de administración de Django a través de Cron con Virtualenv

Ejecutar comandos de administración de Django a través de tareas cron mientras se usa un entorno virtual puede ser difícil. El problema principal es cómo activar el entorno virtual y acceder a la configuración del proyecto Django dentro del contexto del trabajo cron.

Solución: Ejecutar comandos de administración de Django con Cron y Virtualenv

Método 1: Ejecución directa de Python

Para ejecutar comandos de administración de Django con cron y virtualenv:

  • Usa el ejecutable de Python del entorno virtual
  • Especifica la ruta completa a manage.py

Ejemplo de una tarea cron:

0 3 * * * cd /home/user/project && /home/user/project/env/bin/python /home/user/project/manage.py command arg

Este método utiliza el intérprete de Python de tu entorno virtual para ejecutar el comando de administración de Django.

Consejo: Variables de entorno en Cron

Al usar cron, recuerda que se ejecuta con un entorno limitado. Si tu proyecto Django depende de variables de entorno específicas, es posible que necesites configurarlas en la tarea cron o cargar un archivo que las configure:

0 3 * * * source /path/to/env_vars.sh && cd /home/user/project && /home/user/project/env/bin/python /home/user/project/manage.py command arg

Método 2: Usar un script envoltorio

Otra forma de ejecutar comandos de administración de Django con cron y virtualenv es creando un script envoltorio:

  • Crea un script de shell para activar el entorno virtual
  • Ejecuta los comandos de Django dentro del script

Ejemplo de un script envoltorio:

#!/bin/sh
source /home/user/project/env/bin/activate
cd /home/user/project/
./manage.py command arg

Guarda este script con una extensión .sh, hazlo ejecutable con chmod +x nombre_del_script.sh, luego configura tu tarea cron para ejecutar este script:

0 3 * * * /ruta/a/tu/nombre_del_script.sh

Este método te permite realizar pasos de configuración antes de ejecutar el comando de Django.