我正在尝试从 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在虚拟环境中使用来做到这一点:
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要尝试的另一件事是在最顶部的脚本中进行相同的更改:
manage.py
#!/home/my/virtual/bin/python