Cron和virtualenv

问题:

我试图从cron运行一个Django管理命令。我正在使用virtualenv来保持我的项目沙盒。
我看到这里和其他地方的示例显示了在virtualenv内的运行管理命令,如:

0 3 * * * source /home/user/project/env/bin/activate && /home/user/project/manage.py command arg

但是,即使syslog在任务开始时显示一个条目,该任务也不会实际运行(脚本的日志文件为空)。如果我从shell手动运行行,它的工作原理。
我可以通过cron获得命令的唯一方法是将命令中断并将其放入哑ash ash包装器脚本中:

#!/bin/sh
source /home/user/project/env/bin/activate
cd /home/user/project/
./manage.py command arg

请告诉我有什么区别。我失踪了什么
谢谢
编辑:
ars想出了一个组合的命令:

0 3 * * * cd /home/user/project && /home/user/project/env/bin/python /home/user/project/manage.py command arg

至少在我的情况下,调用virtualenv的激活脚本什么也没做。这样做,所以与演出。

回答:

您可以通过在虚拟环境中使用python来实现此目的:

/home/my/virtual/bin/python /home/my/project/manage.py command arg

编辑:如果您的django项目不在PYTHONPATH中,则需要切换到正确的目录:

cd /home/my/project && /home/my/virtual/bin/python ...

您还可以尝试从cron记录失败:

cd /home/my/project && /home/my/virtual/bin/python /home/my/project/manage.py > /tmp/cronlog.txt 2>&1

另一件值得尝试的是在顶部的manage.py脚本中进行相同的更改:

#!/home/my/virtual/bin/python

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Cron and virtualenv

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

4 + = 5