通过cron运行django的python脚本

我有一个连接到外部主机的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 

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

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

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

当我以django用户login时,shell脚本运行正常。 但是cron不会运行! 我在日志文件中没有错误。 我相信这是非常简单的事情,但我只是没有看到它…

Solutions Collecting From Web of "通过cron运行django的python脚本"

问题是我有一个环境变量来告诉Django它是否在开发或生产中运行。 Crontab不会执行.bashrc文件,在这里我导出这个变量,所以必须添加到我的shell脚本中:

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

想到两件事。 我不认为cron会使你想要的代字符替换 – 也许我错了,但是尝试在你的cron条目中指定完整路径(即/ home / myuser / project_dir / …)以及你的脚本。

另外,cron条目中的“django”是什么? 这是你的脚本的名字或是一个错字? 最后,要记录脚本执行中可能出现的错误,请尝试:

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