python - 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 运行命令的唯一方法是将命令分解并将它们放入一个愚蠢的 bash 包装脚本中:

#!/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

https://stackoverflow.com/questions/3287038/

相关文章:

linux - 在 Linux 中更改默认 shell

python - 如何从多维数组中提取一列?

windows - Windows 和 Linux 目录名称中禁止使用哪些字符?

linux - 如何在 Vimdiff 中展开/折叠差异部分?

python - 有没有办法在 Python 中使用 PhantomJS?

linux - 在 Linux 中自动重复命令

linux - 查找一个目录中存在但另一个目录中不存在的文件

python - 如何格式化小数以始终显示 2 个小数位?

linux - Linux 中是否有任何标准的退出状态代码?

python - 转义正则表达式字符串