我正在尝试从cron运行Django管理命令。我正在使用virtualenv使我的项目沙盒化。
我在这里和其他地方都看到了一些示例,这些示例显示了在virtualenv内部运行管理命令的过程,例如:
0 3 * * * source /home/user/project/env/bin/activate && /home/user/project/manage.py command arg
但是,即使syslog在任务应该启动时显示一个条目,该任务也不会实际运行(脚本的日志文件为空)。如果我从外壳程序手动运行该行,它将按预期工作。
当前,我可以通过cron运行命令的唯一方法是将命令分解并将其放入哑巴什包装器脚本中:
#!/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脚本的最顶部进行相同的更改:
manage.py
#!/home/my/virtual/bin/python