通过cron运行django的python脚本

时间:2010-08-09 18:17:45

标签: linux django ubuntu cron

我有一个python脚本连接到外部主机,获取一些数据,并用数据填充Django数据库。填充数据库的python脚本使用这些行来设置django环境:

path = os.path.normpath(os.path.join(os.getcwd(), '..'))
sys.path.append(path)
from django.core.management import setup_environ
import settings
setup_environ(settings)

然后我有一个实际运行python脚本的shell脚本:

export PYTHONPATH=$PYTHONPATH:/home/django/project_dir/
cd ~/project_dir/scripts/
~/virtualenv/bin/python my_script.py

然后我的cron配置,放在/etc/cron.d /

0 1 * * * django ~/project_dir/scripts/my_script.sh > /var/log/django_cron.log

请注意,django项目拥有自己的用户和虚拟环境。

当我以django用户身份登录时,shell脚本运行正常。但是cron不会运行!我在日志文件中没有错误。我确信这很简单,但我只是看不到......

2 个答案:

答案 0 :(得分:2)

问题实际上是我有一个环境变量告诉django它是否在开发或生产中运行。 Crontab不执行导出此变量的.bashrc文件,因此必须将其添加到我的shell脚本中:

export FLAVOR=live
export PYTHONPATH=$PYTHONPATH:/home/django/project_dir/
cd ~/project_dir/scripts/
~/virtualenv/bin/python my_script.py

答案 1 :(得分:0)

有两件事情浮现在脑海中。我不认为cron会使你期望的代字号替换 - 也许我错了,但尝试在你的cron条目中指定完整路径(即/ home / myuser / project_dir / ...)作为你的脚本。

另外,你的cron入口中的“django”是什么?它是你的脚本的名称还是错字?最后,要记录脚本执行中可能出现的错误,请尝试:

0 1 * * * /home/myuser/project/script.sh > /var/log/django_cron.log 2>&1