web-dev-qa-db-fra.com

cronjob ne peut pas trouver les variables d'environnement définies dans .bashrc

J'ai une exigence très simple pour laquelle j'ai essayé de chercher une solution, mais je n'ai pas pu obtenir de solution définie standard. Ce que je veux savoir, c'est pour ma question ci-dessous quelle est la solution correct.

Question : Je dois exécuter un script cron (qui est un script python) à l'aide de crontab.

en utilisant crontab -e, j’ai ajouté cette ligne à mon fichier cron:

* * * * * /usr/bin/python /srv/x/y/src/run.py > /tmp/listener.log 2>&1

le script démarre mais utilise des variables d'environnement. Je reçois une erreur dans le fichier journal que les vars env ne sont pas définis?

où devrais-je définir mon env vras? J'ai même essayé de définir dans .bashrc mais toujours la même erreur. cronjob ne peut pas le trouver.

qu'est-ce que je rate?

1
anekix

Ecrivez un petit script bash mypythonscript composé de:

#!/bin/bash
set ENVIRONMENT_VARIABLE_1=...
set ENVIRONMENT_VARIABLE_2=...
/usr/bin/python /srv/x/y/src/run.py > /tmp/listener.log 2>&1

Rendez-le exécutable:

chmod +x mypythonscript

Dans la crontab, remplacez la ligne par

* * * * * /path/to/mypythonscript
1
Jos

Plutôt que de conserver les définitions de variable à deux endroits, enveloppez votre appel de programme dans un simple script bash qui identifie votre ~/.bashrc:

#!/bin/bash
source $HOME/.bashrc
/usr/bin/python /srv/x/y/src/run.py > /tmp/listener.log 2>&1  

chmod +x le script et exécutez-le à partir de votre crontab.

1
waltinator