使用crontab与django [英] Using crontab with django
问题描述
我需要创建一个函数,每天从crontab发送通讯。我在互联网上找到了两种方法:
I need to create a function for sending newsletters everyday from crontab. I've found two ways of doing this on the internet :
第一个文件放在django项目文件夹中:
First - file placed in the django project folder:
#! /usr/bin/env python
import sys
import os
from django.core.management import setup_environ
import settings
setup_environ(settings)
from django.core.mail import send_mail
from project.newsletter.models import Newsletter, Address
def main(argv=None):
if argv is None:
argv = sys.argv
newsletters = Newsletter.objects.filter(sent=False)
message = 'Your newsletter.'
adr = Address.objects.all()
for a in adr:
for n in newsletters:
send_mail('System report',message, a ,['user@example.com'])
if __name__ == '__main__':
main()
b $ b
我不知道是否会工作,我不知道如何运行它。让我们说它叫run.py,所以我应该在cron中使用 0 0 * * * python /path/to/project/run.py
来调用它。
第二个解决方案 - 在任何地方创建我的发送函数(就像一个正常的django函数),然后创建一个run.py脚本:
Second solution - create my send function anywhere (just like a normal django function), and then create a run.py script :
import sys
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
module_name = sys.argv[1]
function_name = ' '.join(sys.argv[2:])
exec('import %s' % module_name)
exec('%s.%s' % (module_name, function_name))
: 0 0 * * * python /path/to/project/run.py newsletter.views daily_job()
推荐答案
我建议您创建您的功能 django-management-command 并通过crontab运行
i would suggest creating your functionality as django-management-command and run it via crontab
如果您的命令 send_newsletter
,那么简单
if your command is send_newsletter
then simply
0 0 * * * python /path/to/project/manage.py send_newsletter
在这种情况下不需要设置设置模块/
and you don't need to take care of setting the settings module in this case/
这篇关于使用crontab与django的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!