在cron中的Django独立运行
问题描述:
我想在我的crontab中运行自动通讯功能,但不管我尝试什么 - 我无法让它工作。这样做的正确方法是什么? 这是我的crontab条目:在cron中的Django独立运行
0 */2 * * * PYTHONPATH=/home/muntu/rails python2.6 /home/muntu/rails/project/newsletter.py
而且newsletter.py文件,该文件位于我的Django项目的顶层文件夹:
#! /usr/bin/env python
import sys
import os
os.environ["DJANGO_SETTINGS_MODULE"] = "project.settings"
from django.core.management import setup_environ
from project import settings
setup_environ(settings)
from django.template.loader import get_template, render_to_string
from django.template import Context
from django.core.mail import EmailMultiAlternatives
from django.utils.translation import ugettext_lazy as _
from django.core.mail import send_mail
from django.conf import settings
from project.utilsFD.models import *
from django.http import HttpResponse, HttpResponseRedirect, Http404
def main(argv=None):
if argv is None:
argv = sys.argv
template_html = 'static/newsletter.html'
template_text = 'static/newsletter.txt'
newsletters = Newsletter.objects.filter(sent=False)
adr = NewsletterEmails.objects.all()
for a in adr:
for n in newsletters:
to = a.email
from_email = settings.DEFAULT_FROM_EMAIL
subject = _(u"Newsletter - Method #1")
text_content = render_to_string(template_text, {"title": n.title,"text": n.text, 'date': n.data, 'email': to})
html_content = render_to_string(template_html, {"title": n.title,"text": n.text, 'date': n.data, 'email': to})
msg = EmailMultiAlternatives(subject, text_content, from_email, [to])
msg.attach_alternative(html_content, "text/html")
msg.content_subtype = "html"
msg.send()
n.sent = True
n.save()
if __name__ == '__main__':
main()
我在做什么错?该函数本身不工作时为Django应用程序运行的任何问题,但是当我试图从控制台运行它,它给了我:
Traceback (most recent call last):
File "newsletter.py", line 7, in <module>
from project import settings
ImportError: No module named project
而且它不会从cron在所有的工作。
答
试试你的cron项更改为:
0 */2 * * * cd /home/muntu/rails && python2.6 /home/muntu/rails/project/newsletter.py
这将确保“轨道”目录是Python的路径。如果要设置PYTHONPATH,则创建一个shell脚本:
#!/bin/sh
export PYTHONPATH=/home/muntu/rails
python2.6 /home/muntu/rails/project/newsletter.py
并将shell脚本放入cron项中。
是否存在'/ home/muntu/rails/project/__ init __。py'? – unutbu 2010-07-25 02:24:06
你在'project'文件夹中有'__init __。py'文件吗? – 2010-07-25 02:45:52
当然可以。我想没有任何django项目没有办法运行没有它:) – muntu 2010-07-25 10:28:39