Virtualenv并没有改变Cronjob的PYTHONPATH

时间:2015-07-08 04:13:51

标签: python cron centos virtualenv

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/

2 个答案:

答案 0 :(得分:0)

来自man page

  

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

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

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

答案 1 :(得分:0)

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

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

PYTHONPATH=/path/to/python
export PYTHONPATH

echo $PYTHONPATH
echo $PATH