Переменные среды Virtualenvwrapper при запуске crons

Я использую базовый cron, для которого требуются переменные среды, которые я установил с помощью virtualenvwrapper. Переменные среды устанавливаются в /home/ubuntu/.virtualenvs/testcron/bin/activate

Когда я запускаю команду cd /home/ubuntu/test_script && /home/ubuntu/.virtualenvs/testcron/bin/python3 my_script.py, сценарий запускается, как задумано, без ошибок. Сценарий импортирует переменную среды и распечатывает ее.

Однако, когда я запускаю тот же сценарий через cron (* * * * * cd /home/ubuntu/test_script && /home/ubuntu/.virtualenvs/testcron/bin/python3 my_script.py), я получаю эту ошибку.

Traceback (most recent call last):
  File "my_script.py", line 7, in <module>
    main()
  File "my_script.py", line 4, in main
    print(os.environ['SOME_ENV_VARIABLE'])
  File "/home/ubuntu/.virtualenvs/testcron/lib/python3.5/os.py", line 725, in __getitem__
    raise KeyError(key) from None
KeyError: 'SOME_ENV_VARIABLE'

Когда я запускаю следующее, у меня, кажется, нет никаких проблем

~$ /home/ubuntu/.virtualenvs/testcron/bin/python3
>>> import os
>>> os.environ['SOME_ENV_VARIABLE']
'my_env_variable_value'

Я упускаю что-то очевидное, есть ли у меня проблема с конфигурацией virtualenvwrapper или есть уловка для запуска crons таким образом?


person shartshooter    schedule 14.01.2019    source источник


Ответы (1)


Запуск python из virtualenv (/home/ubuntu/.virtualenvs/testcron/bin/python3) разрешает доступ к venv site-packages, но не активирует venv. Если у вас есть что-то необычное в bin/activate, вы должны использовать это каждый раз, когда вам это нужно:

* * * * * cd /home/ubuntu/test_script && . /home/ubuntu/.virtualenvs/testcron/bin/activate && /home/ubuntu/.virtualenvs/testcron/bin/python3 my_script.py
person phd    schedule 15.01.2019
comment
И если env не устанавливает эту переменную для вас, то ваш вопрос поднимает неправильное дерево, и вам просто нужно явно установить его для вашего cron задания. - person tripleee; 15.01.2019
comment
В вопросе говорится: Переменные среды установлены в /home/ubuntu/.virtualenvs/testcron/bin/activate - person phd; 15.01.2019
comment
@phd Похоже, source не работает. Вместо этого вам нужно заменить его на .. В остальном все сработало отлично. Спасибо за помощь - person shartshooter; 15.01.2019
comment
Исправлено source. - person phd; 15.01.2019