一、简介
django-crontab是一个在Django项目中使用的基于系统定时任务的任务调度应用,可以使用Python的Crontab来实现实现周期性的高级任务调度,一般适用于需要定期执行特定任务的情况下。
该应用旨在使开发人员能够将必须运行的定期任务与应用集成,并确保这些任务始终运行。
二、快速上手
使用该应用需要先安装django-crontab,安装方式如下:
pip install django-crontab
安装完成后,在Django项目的settings.py文件内添加如下行:
INSTALLED_APPS = [
...
'django_crontab',
]
# 其他设置
CRONJOBS = [
('*/1 * * * *', 'myproject.myapp.cron.my_scheduled_job'),
('0 0 * * *', 'myproject.myapp.cron.my_scheduled_job'),
]
以上代码表示了一个基本的定期任务,表示每分钟执行一次定时任务,另外一个是每天的00:00执行一次定时任务,函数my_scheduled_job是你要执行的函数。*
三、使用实例
1. 周期性任务
使用django-crontab可以很方便地使用Python的Crontab来实现各种周期性的任务调度。
我们可以设置如下的定期任务,每天中午12:30 PM执行一个定时任务:
CRONJOBS = [
('30 12 * * *', 'myproject.myapp.cron.my_scheduled_job')
]
以上代码表示的是cron表达式的格式,30表示30分钟,12表示12小时(中午12点),星号表示允许在任何日子和月份内执行任务。
同时也可以设置一个月度计划的任务,例如,每月的10号执行一次:
CRONJOBS = [
('0 0 10 * *', 'myproject.myapp.cron.my_scheduled_job')
]
2. 执行管理命令
django-crontab不仅可以让你的项目执行特定的函数,还可以让你在管理命令上使用。
在settings.py的CRONJOBS中添加下面代码:
CRONJOBS = [
...
('*/1 * * * *', 'myproject.myapp.cron.my_scheduled_job'),
('0 0 * * *', 'myproject.myapp.cron.my_scheduled_job'),
('0 0 * * *', 'python manage.py clearsessions'),
('0 0 * * *', 'python manage.py clearcache'),
('0 0 * * *', 'python manage.py update_index'),
]
在示例中,可以看到一些基本的管理命令,如清除缓存等,在CRONTAB中也可以在末尾添加这些任务。
3. 发送定时邮件
如果你需要发送定时邮件,使用django-crontab也可以实现它。
需要进行以下几步操作:
第一步,在settings.py中配置邮件相关设置如下:
CRONTAB_DJANGO_SETTINGS_MODULE = ‘my_project.settings’
CRONTAB_EMAIL = “foo@bar.com"
CRONTAB_USE_HTTPS = True
第二步,设置定期任务如下:
'0 0 * * *', 'python manage.py send_email --subject “my_subject” --text “my_text”'
注意,在定期任务中调用了send_email函数,因此需要在Python代码中创建这个函数,如下所示:
def send_email(subject, text):
from django.core.mail import send_mail
send_mail(subject, text, 'from@example.com', ['to@example.com'], fail_silently=False)
四、注意事项
1. 安装完 django_crontab 应用之后,需要重新运行一遍 python manage.py runserver ,才能够看到新添加的 crontab 任务。
2. 运行定时任务时,默认为 debug=False 。
3. 不支持用逗号分割多个条件
4. django-crontab内置了一个很强大的日志工具,可以帮助你追踪问题。
五、总结
本文简单介绍了Django中的定时任务调度器django-crontab的基础知识,包括使用方法,注意事项和实例。希望可以帮助到Django开发者,提高代码的效率和性能。