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

posted @ 2020-02-22 21:38  Lowell  阅读(753)  评论(0编辑  收藏  举报