django-crontab
安装
django-crontab是基于linux系统的定时任务,所以windows不能使用。目前最高python只支持到3.5,对应的django也就是2.x的版本,3.0不支持。
django3.x版本可以选择APScheduler或者使用celery
pip install django-crontab
使用
在django的settings中注册app
INSTALLED_APPS = (
'django_crontab',
...
)
现在创建一个新方法,cron每5分钟执行一次,
在myapp/crontab.py中为:
def my_scheduled_job():
pass
添加到settings.py
CRONJOBS = [
('*/5 * * * *', 'myapp.crontab.my_scheduled_job')
]
定义位置参数和关键字参数,以便调用django管理命令:
CRONJOBS = [
('*/5 * * * *', 'myapp.cron.other_scheduled_job', ['arg1', 'arg2'], {'verbose': 0}),
('0 4 * * *', 'django.core.management.call_command', ['clearsessions']),
]
# 会将位置参数和关键字参数传递给想要执行的方法
最后运行此命令将所有定义的作业从CRONJOBS添加到crontab
python manage.py crontab add
# 每次CRONJOBS中的任务发生变化时,都要执行一遍该命令。
显示此项目的当前活跃的任务:
python manage.py crontab show
删除所有定义的作业
python manage.py crontab remove
配置
CRONJOBS
# cronjobs中的每个任务为一个元组
必需:cron计时'* * * * *'(通常格式:http://en.wikipedia.org/wiki/Cron#Format)
必需:要执行的方法的python模块路径
可选:要执行方法的位置参数列表(默认值:[])
可选:要执行方法的关键字参数字典(默认值:{})
可选:特定于工作的后缀(用于将文件重定向到/重定向到文件,默认:“”)
CRONJOBS = [
('*/5 * * * *', 'myapp.cron.other_scheduled_job', ['arg1', 'arg2'], {'verbose': 0}),
('0 4 * * *', 'django.core.management.call_command', ['clearsessions']),
]
cron计时
* * * * *
- - - - -
| | | | |
| | | | +----- day of week (0 - 7) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
| | | +---------- month (1 - 12) OR jan,feb,mar,apr ...
| | +--------------- day of month (1 - 31)
| +-------------------- hour (0 - 23)
+------------------------- minute (0 - 59)
CRONTAB_LOCK_JOBS
如果同一作业的旧实例仍在运行,则阻止启动作业,默认:False
CRONTAB_EXECUTABLE
操作系统的crontab可执行文件的路径,默认:'/usr/bin/crontab'
CRONTAB_DJANGO_PROJECT_NAME
django项目的名称,用于构建manage.py的路径,并通过注释在contrab中标记作业以供以后删除
默认值是从DJANGO_SETTINGS_MODULE环境变量读取
CRONTAB_DJANGO_MANAGE_PATH
manage.py文件的路径(包括manage.py本身,即'/home/john/web/manage.py')
默认值是使用DJANGO_PROJECT_NAME生成
CRONTAB_DJANGO_SETTINGS_MODULE
- path to the python interpreter executable used to run the scheduled job
- default uses the interpreter executable used to add the jobs (via ‘python manage.py crontab add’)
CRONTAB_COMMAND_PREFIX
- something you wanne do or declare before each job gets executed. A good point for environment variables.
- default: ‘’ (empty string)
- example: ‘STAGE=production’
CRONTAB_COMMAND_SUFFIX
在每项工作完成后你想做的事。默认空字符串。
举例: '2>&1'
CRONTAB_COMMENT
用于标记要删除的添加的contab行,默认值包括项目名称以区分同一主机和用户上的多个项目
默认:'django-crontabs for ' + CRONTAB_DJANGO_PROJECT_NAME