Comment appeler un script python de crontab qui nécessite d'activer activate (source env/bin/active)?Appel de script python depuis crontab avec activation
Répondre
Le script d'activation de virtualenv est assez simple. Il définit principalement le chemin vers l'interpréteur Python de votre virtualenv; les autres choses qu'il fait (en réglant PS1
, en sauvegardant les anciennes variables, etc.) ne sont pas vraiment nécessaires si vous n'êtes pas dans un shell interactif. Donc, la meilleure façon est juste de lancer votre script Python avec l'interpréteur Python correct, ce qui peut être fait dans l'une des deux façons suivantes:
1. Configurez votre script Python pour utiliser l'interpréteur Python de votre virtualenv
Si l'on suppose votre interprète de virtualenv est à ~/virtualenv/bin/python
, vous pouvez mettre ce chemin en haut de votre script Python:
#!/home/user/virtualenv/bin/python
Et puis lancez votre script à partir de votre crontab, comme d'habitude.
2. Lancez le script avec l'interpréteur Python approprié dans votre cronjob
En supposant que votre script est à ~/bin/cronjob
et l'interpréteur Python de votre virtualenv est à ~/virtualenv/python
, vous pouvez mettre dans votre crontab:
* * * * * /home/user/virtualenv/python /home/user/bin/crontab
Mon approche est toujours de garder crontab aussi simple que possible et traiter toutes les configurations dans les scripts appelés par crontab.
1) Créer un script shell: par exemple /var/webapp/cron.sh
#!/bin/sh
PATH="/var/webapp/.env/bin:$PATH"
export PATH
cd /var/webapp/
python test.py
où /var/webapp/.env/bin est l'emplacement de virtualenv. Paramètre PATH, vous n'avez pas besoin d'exécuter la source ../activate
2) Réglez correctement votre environnement. Par exemple, pour une application Django:
#!/usr/bin/env python
import os
from datetime import datetime
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings.production'
os.environ['DJANGO_CONF'] = 'settings.production'
from util.models import Schedule
dset = Schedule.objects.all()
for rec in dset:
print rec
print 'cron executed %s' % datetime.today()
Sur cet exemple, les paramètres de django sont situés sur les paramètres/production.py
3) Enfin, modifier/etc/crontab. Par exemple, pour être exécuter chaque demi-heure, tous les jours:
1,31 * * * * root /var/webapp/cron.sh >> /var/webapp/cron.log
avis qu'il est important de générer des journaux pour vous aider à trouver des erreurs ou des messages de débogage.
- 1. crontab script python wont exécuter
- 2. Python, appel dynamique du script
- 3. Aller écrous avec l'exécution de script python via crontab sur debian!
- 4. Appel de Wine depuis Apache
- 5. Activation de la fenêtre Python
- 6. Crontab sans crontab -e
- 7. Impossible de faire fonctionner Crontab
- 8. Appel de Python depuis Java via un moteur de script (jython)?
- 9. Appel de script depuis java, signal sigpipe reçu
- 10. Appelez le script python depuis l'application AIR?
- 11. Appel de bash depuis PsExec depuis SQL avec xp_cmdshell
- 12. Exécuter crontab avec l'entrée utilisateur
- 13. Exécution d'un script de ligne de commande depuis Django & Python
- 14. détecter si le script python est exécuté à partir de la console ou par crontab
- 15. Demander une élévation de l'UAC depuis un script Python?
- 16. Appel de l'application/du script Python à partir du C#
- 17. Comment obtenir des emails colorés de crontab?
- 18. avec script python
- 19. Crontab dans Plesk
- 20. Appel de MYSQL depuis un projet Innosetup
- 21. appel script python externe dans la même fenêtre
- 22. Appel de fonction python avec variable
- 23. Comment tester l'entrée de crontab?
- 24. Utilisateur Crontab + Python + Fonds d'écran aléatoires = Ne fonctionne pas?
- 25. PHP générer un crontab
- 26. comment exécuter un script Python avec activeresource?
- 27. Appel de l'objectif c viewcontroller depuis javascript
- 28. Comment lancer 'python setup.py install' depuis Python?
- 29. Script Python exécuté avec Makefile
- 30. bash: appel d'un script avec un argument de guillemets
qu'en est-il des chemins d'accès aux bibliothèques easy_install? – Timmy
S'ils sont également installés dans l'environnement virtuel, ou dans le répertoire "global" des packages de sites, ils doivent être trouvés; sinon, vous devrez les mettre dans votre '$ PYTHONPATH', ce qui devient un peu plus laid mais peut être accompli en lançant la corbeille Python avec'/usr/bin/env' ou quelque chose comme ça. – mipadi
le dernier bloc de code devrait probablement se terminer par "/ home/bin/cronjob" –