2014-10-01 3 views
0

Я создал мою send_newsletter команды администратора с Джанго, когда я используюCrontab для отправки почты

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, '-*{^@+*@=)=-+*-=+*-=*+=--=*-*=-==)@@###/[email protected]]}-*', link.id) 
       tag = soup.new_tag('img', src="%s/compagnes/mail/%s/%s/" % (settings.WEBSITE_URL, mail.id, '-*{^@+*@=)=-+*-=+*-=*+=--=*-*=-==)@@###/[email protected]]}-*')) 
       soup.body.insert_after(tag) 
       content = soup.prettify() 
       for r in recipients: 
        c = content.replace('-*{^@+*@=)=-+*-=+*-=*+=--=*-*=-==)@@###/[email protected]]}-*', "%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() 

Я создал хроны с

sudo crontab -e 

на терминале и поместить его в файле кронтаб:

*/5 * * * * cd /srv/apps/newsletter/actecil_newsletter && python manage.py send_newsletter 

Но это не работает, если кто-то знает, как это исправить?

EDIT: Я получил эту ошибку в журнале кронтаба

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 
+0

Может быть много чего. Cron должен отправить вам электронное письмо, когда оно не удастся; если вы не получите это письмо, вы можете перенаправить вывод, добавив '>/tmp/log 2> & 1' в конец задания cron и посмотрите на файл на наличие ошибок. –

+0

Я думаю, что вы используете ubuntu, а в ubuntu работает crontab, но, к сожалению, код django не выполняется. Я предлагаю вам использовать джанго-сельдерей для этого. –

+0

@JohnZwinck Я добавил журнал ошибок в вопрос. – Eowiena

ответ

0

Я finnaly нашел, как исправить мою проблему спасибо всем за то, чтобы помочь мне. После того, как журналы (спасибо Джону Zwinck), я добавил это к моему manage.py

sys.path.append('/path/to/django/apps_django_1_4') 
sys.path.append('/path/to/django/apps_django_1_4/Django-1.4.3') 
sys.path.append('%s/actecil_newsletter' % os.getcwd()) 
sys.path.append('%s/actecil_newsletter/actecil_newsletter' % os.getcwd()) 

Это сделало работу, надеюсь, что это поможет кому-то еще, то мне :)

Спасибо всем

0

Проблема в том, что питон работает в хронах не может получить доступ к установке Джанго. Есть много вопросов о том, как Django установлен в вашей системе? (с пакетом SO, пипсом или вручную).

Использование django-cron сделает вашу жизнь намного проще, упростить разработку и управлять всем приложением в Django-полосной;)

Советов:

  • В разработке Django вы должны использовать virtualenv
  • Подумайте о том, как задавать задания/очереди, например Celery
0

Не могли бы вы попытаться запустить работу cron как конкретный пользователь? Когда я начал с django, у меня были проблемы с командами администратора django и заданиями cron. С тех пор, я как правило, работают в качестве конкретного пользователя

*/5 * * * * su -l <user> -c cd /srv/apps/newsletter/actecil_newsletter && python manage.py send_newsletter 
Смежные вопросы