【发布时间】:2014-10-01 20:14:21
【问题描述】:
当我使用 django 时,我创建了我的 send_newsletter 管理命令
python manage.py send_newsletter
它有效。 我的 send_newsletter.py
sys.path.append('/srv/apps/')
sys.path.append('%s/actecil_newsletter' % os.getcwd())
sys.path.append('%s/actecil_newsletter/actecil_newsletter' % os.getcwd())
sys.path.append('/srv/apps/apps_django_1_4')
sys.path.append('/srv/apps/apps_django_1_4/Django-1.4.3')
if 'DJANGO_SETTINGS_MODULE' not in os.environ.keys():
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
class Command(BaseCommand):
args = '<mail_id, mail_id, ...>'
def handle(self, *args, **options):
mail = Mail.objects.all()
for mail in mail:
print "------------------------------------------------------------------------------------"
if not mail.sended :
soup = BeautifulSoup(mail.content)
subject = mail.subject
recipients = []
for t in mail.tags.all():
for r in t.recipients.all():
if not r in recipients:
recipients.append(r)
for r in mail.recipients.all():
if not r in recipients:
recipients.append(r)
if recipients:
for a in soup.find_all('a'):
link = Link()
link.link = (a.get('href'))
link.mail = mail
link.save()
a['href'] = "%s/compagnes/link/%s/%s/%s/" % (settings.WEBSITE_URL, mail.id, '-*{^@+*@=)=-+*-=+*-=*+=--=*-*=-==)@@###/+@]}-*', link.id)
tag = soup.new_tag('img', src="%s/compagnes/mail/%s/%s/" % (settings.WEBSITE_URL, mail.id, '-*{^@+*@=)=-+*-=+*-=*+=--=*-*=-==)@@###/+@]}-*'))
soup.body.insert_after(tag)
content = soup.prettify()
for r in recipients:
c = content.replace('-*{^@+*@=)=-+*-=+*-=*+=--=*-*=-==)@@###/+@]}-*', "%s" % r.id)
msg = EmailMultiAlternatives(subject.encode('utf-8'), c.encode('utf-8'), settings.DEFAULT_FROM_EMAIL, [r.mail, ])
msg.attach_alternative(c, "text/html")
msg.send()
mail.sended = True
mail.date_sent = datetime.datetime.now()
mail.save()
我用
创建了一个 cronsudo crontab -e
在终端上并将其放入 crontab 文件中:
*/5 * * * * cd /srv/apps/newsletter/actecil_newsletter && python manage.py send_newsletter
但它不起作用,如果有人知道如何解决它?
编辑:我在 crontab 的日志中收到此错误
Traceback (most recent call last):
File "manage.py", line 9, in <module>
from django.core.management import execute_from_command_line
ImportError: No module named django.core.management
【问题讨论】:
-
可能有很多东西。 Cron 失败时应该向您发送电子邮件;如果您没有收到该电子邮件,您可以通过将
>/tmp/log 2>&1添加到 cron 作业的末尾来重定向输出并查看文件是否有错误。 -
我认为您正在使用 ubuntu 并且在 ubuntu 中 crontab 正在运行,但不幸的是 django 代码没有被执行。我建议你为此使用 django-celery。
-
@JohnZwinck 我在问题中添加了错误日志。
-
看起来
PYTHONPATH可能是为你设置的,但不是为 cron 设置的? -
我添加了 send_newsletter.py 文件中使用的 sys.path 并放入了 manage.py 并且它工作了