Подтвердить что ты не робот

запустить задание crontab, используя анаконду env

Я хочу, чтобы задание cron выполняло python script, используя уже существующую среду python anaconda, называемую my_env. Единственное, что я могу сделать, это выполнить задание cron script, называемое my_script.bash, которое, в свою очередь, активирует env, а затем запускает python script.

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

Попытка выполнить этот script из командной строки не работает:

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

Что мне нужно сделать, чтобы убедиться, что соответствующая среда активирована. Его хорошо объяснить мне, как мне 5.

4b9b3361

Ответ 1

Не вызывайте sh, но bash. source - это команда bash.

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

Или просто

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

так как вы добавили shebang bash.

Ответ 2

Недавно я переключился с на Анаконду именно для того, чтобы избежать необходимости активировать env в заданиях cron. Анаконда делает это очень простым, основываясь на переменной окружения PATH. (Я использую не полную установку Anaconds, но я считаю, что anaconda должна работать так же)

Есть два разных подхода, которые я протестировал;

  • Добавьте shebang в ваш скрипт на python, main.py

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

  • Добавьте PATH к вершине вашего crontab

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

Обновить:

Ответ Жерома и комментарии cbarrick верны. Я просто сгорел, используя описанный выше подход в среде Conda env, в которой требовался pynco, которому нужна полная среда nco для поиска подходящих команд nco, таких как ncks, ncrcat. Решается запуском bash-скрипта из cron, который сначала вызывает conda.

Ответ 3

В моем случае я получил эту ошибку, когда запустил эту строку сценария оболочки: source activate my_env

activate: No such file or directory

Поэтому я изменил source activate my_env на source/path/to/conda/bin/activate my_env. Тогда это начинает работать.