Virtualenv 不会改变 Cronjob 中的 PYTHONPATH
Virtualenv does not change PYTHONPATH in Cronjob
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/
来自man page,
Several environment variables are set up automatically by the cron(8) daemon. SHELL is set to /bin/sh, and LOGNAME and HOME are set from the /etc/passwd line of the crontab's owner. HOME and SHELL may be overridden by settings in the crontab; LOGNAME may not.
您应该在 crontab 文件或您的脚本中明确设置 $PYTHONPATH
。
This ServerFault post有几种在cron中设置环境变量的方法。
无法从 crontab 访问 PYTHONPATH 变量。您应该只在脚本中设置 PYTHONPATH 变量。
#!/bin/bash
cd /var/www/envs/venv
source bin/activate
PYTHONPATH=/path/to/python
export PYTHONPATH
echo $PYTHONPATH
echo $PATH
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/
来自man page,
Several environment variables are set up automatically by the cron(8) daemon. SHELL is set to /bin/sh, and LOGNAME and HOME are set from the /etc/passwd line of the crontab's owner. HOME and SHELL may be overridden by settings in the crontab; LOGNAME may not.
您应该在 crontab 文件或您的脚本中明确设置 $PYTHONPATH
。
This ServerFault post有几种在cron中设置环境变量的方法。
无法从 crontab 访问 PYTHONPATH 变量。您应该只在脚本中设置 PYTHONPATH 变量。
#!/bin/bash
cd /var/www/envs/venv
source bin/activate
PYTHONPATH=/path/to/python
export PYTHONPATH
echo $PYTHONPATH
echo $PATH