• Django定时任务之django-crontab


    Django定时任务之django-crontab

    一.官网

    GitHub地址:https://github.com/kraiz/django-crontab

    优点:接入也很方便,功能也很全面

    缺点:存在一些坑和无法解决的问题,使用时需注意

    注意:django-crontab只能基于linux环境使用

    二.基本使用

    1.安装

    pip install django-crontab
    
    • 1

    2.注册APP,配置到settings INSTALLED_APPS

    INSTALLED_APPS = (
        'django_crontab',
        ...
    )
    
    • 1
    • 2
    • 3
    • 4

    3.编写定时任务

    在Django的APP下面新建一个myapp/crontab.py文件,把需要执行的定时任务放进去

    实例:

    # 每隔5分钟运行一次
    def my_scheduled_job():
      pass
    
    # 每隔6小时运行一次
    def test_scheduled_job():
      pass
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    4.在settings中增加CRONJOBS配置

    CRONJOBS = [
        # 每隔5分钟运行一次
        ('*/5 * * * *', 'myapp.crontab.my_scheduled_job'),
        # 每隔6小时运行一次
        ('*/360 * * * *', 'myapp.crontab.test_scheduled_job'),
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    5.基本语法

    # ┌───────────── minute (0 - 59)
    # │ ┌───────────── hour (0 - 23)
    # │ │ ┌───────────── day of the month (1 - 31)
    # │ │ │ ┌───────────── month (1 - 12)
    # │ │ │ │ ┌───────────── day of the week (0 - 6) (Sunday to Saturday;
    # │ │ │ │ │                                   7 is also Sunday on some systems)
    # │ │ │ │ │
    # │ │ │ │ │
    # * * * * * 
    
    #所有的值都必须在相应的范围之内,否则视为无效。在填值区域内可以是*也可以是以”,”分隔的一组值。值可以是一个数据也可以是用连接符连起来的两个数(表示范围)。
    #星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
    #逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
    #中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
    #正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
    注:日期的格式可以是星期,也可以是一个月中的天。假如两个都有值,则在这两个时间都会执行。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    733392-20180530112549735-793099971

    6.基本格式:

    定时执行自定义函数:

    • 要求:cron计时通常格式(有关更多示例,请参阅 Wikipediacrontab.guru
    • 要求:Django项目模块路径下待执行定时任务.
    • 可选:将执行结果或日志写入文件的路径.
    CRONJOBS = [
       # ('*/1 * * * *', 'app名.定时函数所在的py文件名.定时函数名', '>> 输出文件路径和名称')
        # 每1分钟执行restart_pm2函数,并将执行中的返回的内容全部打印到crontab.log文件中
        ('*/1 * * * *', 'app1.tasks.test11', '>>/home/tianchi/apps/ecology/logs/crontab.log'),
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5

    定时执行自定义命令:

    • 要求:cron计时通常格式
    • 要求:python模块路径下待执行定时任务
    • 可选:方法的位置参数列表(默认值:[])
    • 可选:方法的关键字参数的dict(默认值:{})
    • 可选:将执行结果或日志写入文件的路径.
    CRONJOBS = [
        # 每1分钟执行django的自定义命令,并将执行中的返回的内容全部打印到crontab.log文件中
        # ('*/1 * * * *', 'django.core.management.call_command', ['命令名'], {"参数名": "参数值"}, '>>输出文件路径和名称'),
        ('*/1 * * * *', 'django.core.management.call_command', ['mycommand2'], {"param": "mycommand2_test"}, '>>/home/tianchi/apps/ecology/logs/crontab.log')
    ]
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    7.简单实例:

    晚上11点到早上8点之间每两个小时,早上8点    0 23-7,8 * * *
    每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点    0 11 4 * 1-3
    1月1日早上4点    0 4 1 1 * 
    
    • 1
    • 2
    • 3

    三.常用命令

    添加并开启定时任务

    python manage.py crontab add
    
    • 1

    python环境查看定时任务

    python manage.py crontab show
    
    • 1

    删除定时任务

    python manage.py crontab remove
    
    • 1

    查看定时任务:

    sudo crontab -l
    
    • 1

    四.更多参考:

    博客园:

    阿里云:

    五.填坑记:

    # corn 错误写法:
    * */1 * * * #错误的每隔一小时执行一次,事实上每分钟执行一次
    0 */3 * * * #错误的每隔3小时执行一次写法,实际上每整3小时的0分执行一次。也就是说,它会在每天的3点、9点、12点...等3的整数倍时间点来执行
    # 正确写法:
    */60  * * * * #每60分钟即每小时执行一次
    */180 * * * * #正确的每隔3小时执行一次写法
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    DE0开发板交通灯十字路口红绿灯VHDL
    高考成绩出来,如何选大学和专业?
    如何使用ArcGIS Pro提取河网水系
    对Happens-Before的理解
    python cookbook 学习笔记(持续更新)
    基于python的pdf版本的PPT转换为office PPT
    resnet152 辣椒病虫害图像识别1.0
    其实很多人都在学电子
    linux 内核等待队列
    x86-Hardware-Compatibility-Assessment-and-Porting-Guide
  • 原文地址:https://blog.csdn.net/weixin_44621343/article/details/126761352