web-dev-qa-db-fra.com

exécuter un travail crontab à l'aide d'un env anaconda

Je veux qu'un travail cron exécute un script python en utilisant un environnement anaconda déjà existant python environnement appelé my_env. La seule chose que je puisse penser est d'avoir le travail cron exécuter un script appelé my_script.bash qui à son tour active l'env puis exécute le script python.

#!/bin/bash
source activate my_env
python ~/my_project/main.py

Essayer d'exécuter ce script à partir des lignes de commande ne fonctionne pas:

$ sh scripts/my_script.bash
scripts/my_script.bash: 9: scripts/my_script.bash: source: not found

Que dois-je faire pour m'assurer que l'environnement approprié est activé. C'est ok de m'expliquer comme si j'avais 5 ans.

24
stoebelj

N'appelez pas sh mais bash. source est une commande bash.

- sh scripts/my_script.bash
+ bash scripts/my_script.bash

Ou juste

chmod +x scripts/my_script.bash
./scripts/my_script.bash

depuis que vous avez ajouté le bash Shebang.

10
Jérôme

J'ai récemment passé de canopy à Anaconda précisément pour éviter d'avoir à activer un env dans les tâches cron. Anaconda rend cela très simple, basé sur la variable d'environnement PATH. (J'utilise miniconda pas l'installation complète d'Anaconds mais je crois que anaconda devrait fonctionner de la même manière)

Il y a deux approches différentes, j'ai testé;

  • Ajoutez un Shebang dans votre script python, main.py

    #!/home/users/user_name/miniconda2/envs/my_env/bin/python

  • Ajoutez PATH en haut de votre crontab

    PATH=/home/users/user_name/miniconda2/envs/my_env/bin

Mise à jour:

La réponse de Jérôme et les commentaires de cbarrick sont corrects. Je viens de me brûler en utilisant l'approche ci-dessus dans un environnement Conda qui avait besoin de pynco, qui a besoin de l'environnement conda complet pour trouver les commandes nco appropriées, telles que ncks, ncrcat. Résolu en exécutant un script bash à partir de cron qui appelle conda activate en premier.

20
Eric Bridger

Dans mon cas, j'ai eu cette erreur lorsque j'ai exécuté cette ligne de script Shell: source activate my_env

activate: No such file or directory

J'ai donc changé source activate my_env à source /path/to/conda/bin/activate my_env. Ensuite, il commence à fonctionner.

1
Youngmin Kim