Comment exécuter les commandes de gestion Django depuis Cron avec Virtualenv ?

Publié 8 septembre 2024

Problème : Exécuter des commandes de gestion Django via Cron avec Virtualenv

L'exécution des commandes de gestion Django via des tâches cron tout en utilisant un environnement virtuel peut être complexe. La principale difficulté réside dans l'activation de l'environnement virtuel et l'accès aux paramètres du projet Django dans le contexte de la tâche cron.

Solution : Exécuter des commandes de gestion Django avec Cron et Virtualenv

Méthode 1 : Exécution Python directe

Pour exécuter des commandes de gestion Django avec cron et virtualenv :

  • Utilisez l'exécutable Python de l'environnement virtuel
  • Spécifiez le chemin complet vers manage.py

Exemple de tâche cron :

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

Cette méthode utilise l'interpréteur Python de votre environnement virtuel pour exécuter la commande de gestion Django.

Conseil: Variables d'environnement dans Cron

Lorsque vous utilisez cron, n'oubliez pas qu'il s'exécute avec un environnement limité. Si votre projet Django dépend de variables d'environnement spécifiques, vous devrez peut-être les définir dans la tâche cron ou sourcer un fichier qui les définit :

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éthode 2 : Utilisation d'un script wrapper

Une autre façon d'exécuter des commandes de gestion Django avec cron et virtualenv consiste à créer un script wrapper :

  • Créez un script shell pour activer l'environnement virtuel
  • Exécutez les commandes Django dans le script

Exemple de script wrapper :

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

Sauvegardez ce script avec une extension .sh, rendez-le exécutable avec chmod +x nom_du_script.sh, puis configurez votre tâche cron pour exécuter ce script :

0 3 * * * /chemin/vers/votre/nom_du_script.sh

Cette méthode vous permet d'effectuer des étapes de configuration avant d'exécuter la commande Django.