【问题标题】:Virtualenv does not change PYTHONPATH in CronjobVirtualenv 不会更改 Cronjob 中的 PYTHONPATH
【发布时间】:2015-09-25 19:36:13
【问题描述】:

crontab 代码:

SHELL=/bin/bash
* * * * * /var/www/envs/venv/myproj/scripts/send_hit.sh

.sh 脚本:

#!/bin/bash
cd /var/www/envs/venv
source bin/activate

echo $PYTHONPATH
echo $PATH

输出:

X-Cron-Env: <LANG=en_US.UTF-8>
X-Cron-Env: <SHELL=/bin/bash>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>


/var/www/envs/venv/bin:/usr/bin:/bin

如您所见,$PYTHONPATH 是空的。但是,我手动激活时确实不是。

[root@server venv]# source bin/activate
(venv)[root@server venv]# echo $PYTHONPATH
:/var/www/envs/venv/myproj:/var/www/envs/venv/lib/python2.7/site-packages/

【问题讨论】:

  • bin/activate 不更新/设置 PYTHONPATH 环境变量(您可以只 grep 文件)。它仅更新 PATH 以包含 env 的 bin

标签: python cron centos virtualenv


【解决方案1】:

来自man page

cron(8) 守护程序会自动设置几个环境变量。 SHELL 设置为 /bin/sh,LOGNAME 和 HOME 设置自 crontab 所有者的 /etc/passwd 行。 HOME 和 SHELL 可能会被 crontab 中的设置覆盖; LOGNAME 可能不会。

您应该在 crontab 文件或脚本中明确设置 $PYTHONPATH

This ServerFault post 有一些在 cron 中设置环境变量的方法。

【讨论】:

    【解决方案2】:

    无法从 crontab 访问 PYTHONPATH 变量。您应该在脚本中设置 PYTHONPATH 变量。

    #!/bin/bash
    cd /var/www/envs/venv
    source bin/activate
    
    PYTHONPATH=/path/to/python
    export PYTHONPATH
    
    echo $PYTHONPATH
    echo $PATH
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-25
      • 1970-01-01
      • 1970-01-01
      • 2012-05-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多