运行crons时的Virtualenvwrapper环境变量

时间:2019-01-14 17:29:45

标签: python cron virtualenv virtualenvwrapper

我正在运行一个基本的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的配置是否存在问题?还是可以通过这种方式来运行克朗?

1 个答案:

答案 0 :(得分:2)

从virtualenv(/home/ubuntu/.virtualenvs/testcron/bin/python3)运行python可以访问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