Всякий раз, когда я вхожу в свой экземпляр ec2 Ubuntu, мой терминал выглядит так:
(base) ubuntu@ip-xx-xx-xx
Когда я запускаю свой скрипт Python, который конвертирован из Jupyter notebook с дефолтной средой conda, скрипт работает идеально. Проблема начинается, когда я пытаюсь сделать cronjob.
Когда экземпляр запускается (я постараюсь объяснить как можно лучше), ipython, который запускает скрипт, не может найти пакеты. Потому что это среда conda по умолчанию. Я думал, что все, что мне нужно сделать, это как-то активировать исходный bash, но все провалилось. Что я пробовал до сих пор
- Я пробовал exec bash
- Я пробовал добавить в SHELL bash
- Я пробовал источник bash
- Я пробовал запустить ipython напрямую из среды conda
На данный момент я не знаю, что я упускаю. Все, что я хочу, это когда экземпляр начнет "активировать" среду conda и с помощью ipython запустить скрипт.
решение1
Я предполагаю, что virtualenv активируется в .profile
, что не влияет на cron.
Я бы предложил активировать venv в строке crontab:
SHELL=/bin/bash
[crontab stuff] . /path/to/the/virtualenv/bin/activate && your.py
Настройка SHELL=/bin/bash не является обязательной, но приблизит вас к "обычной" среде. При необходимости также установите PATH, cd в нужный каталог и т. д.
Хороший способ проверки — ssh you@yourserver 'the command above'
если у вас возникли проблемы с получением ошибки, попробуйте добавить ее &>/tmp/debug.log
в команду crontab.
Если вы не уверены, какой путь к virtualenv, попробуйте: type activate
( echo $PATH
, print(sys.path)
, и т. д.)
Больше информации:https://stackoverflow.com/questions/3287038/cron-and-virtualenv#answer-7031758