2016-04-01 19 views
9

Voglio che un cron job esegua uno script python utilizzando un ambiente anaconda python già esistente chiamato my_env. L'unica cosa che posso pensare è che il cron job esegua uno script chiamato my_script.bash che a sua volta attiva l'env e poi esegue lo script python.eseguire un lavoro crontab utilizzando un annaconda env

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

Cercando di eseguire questo script dalle righe di comando non funziona:

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

Cosa devo fare per assicurarsi che l'ambiente adeguato è attivato. Va bene per spiegarlo come se fossi 5.

risposta

3

Non chiamare sh ma bash. source è un comando bash.

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

O semplicemente

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

da quando è stato aggiunto lo shebang bash.

10

Recentemente sono passato da ad Anaconda proprio per evitare di dover attivare un env nei lavori cron. Anaconda rende questo molto semplice, basato sulla variabile di ambiente PATH. (Sto usando non l'installazione completa di Anaconds ma credo che anaconda dovrebbe funzionare allo stesso modo)

Ci sono due approcci diversi, ho provato;

  • Aggiungi uno shebang nello script python, main.py

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

  • Aggiungere Percorso alla parte superiore del vostro crontab

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

+0

ho implementato la tua soluzione in Ubuntu 16 e riuscito a far funzionare Anaconda. Tuttavia, quando provo ad importare il pacchetto PANDAS nello script python che viene eseguito, ottengo un [Errno 2] Nessun file o directory di questo tipo. Qualche idea sul perché? La mia configurazione del comando bash è piuttosto semplice. 'PATH =/home/dev/anaconda3/bin' ' python/home/dev/AUTOSIFT/script.sh' – Adestin

+0

Non capisco la tua domanda. script.sh non è uno script python. È un lavoro cron? Forse è necessario prima fare un panda di installazione di conda. –

+1

Un comando shell attiva uno script python. Ho capito questo però. Il problema era che .sh aveva bisogno di una variabile PATH impostata quando è in esecuzione. – Adestin

Problemi correlati