zoukankan      html  css  js  c++  java
  • 如何让django方法自动地定期执行

    实现思路:
    1.首先把需要自动执行的django method写成django command
    2.将自己定义的django command添加到cron中使用cron服务实现定期执行

    Part1 在django工程中添加自定义的django command
    1.我们自己建立的application叫做myapp,首先在这个app目录下,我们需要新建management目录,这个目录里应该包括:__init__.py(内容为空,用于打包)和commands目录,然后在commands目录下包括:__init__.py和mycommand.py ,其中 mycommand.py就是用于我们自定义command的方法,目录的树状结构如下:

    myapp/
        __init__.py
        models.py
        management/
            __init__.py
            commands/
                __init__.py
                mycommand.py
        tests.py
        views.py

    2.书写command的内容mycommand.py,简单示例如下:

    from django.core.management.base import BaseCommand, commandError           
    
    class Command(BaseCommand):
        def handle(self, *args, **options):         
            print "hello world"

    我们把BaseCommand类关联进来,使用command类和handle方法来作为框架,如上,这个command实现的就是打印 “hello world”.

    通过以上我们就可以使用python manage.py mycommand的方式来运行我们自己的django命令了。

    想了解更详细,看这里。 

    Part2 使用cron来定期执行django command

    1、ubuntu下cron开启/关闭/重启
    配置文件一般为/etc/init.d/cron
    启动:sudo /etc/init.d/cron start
    关闭:sudo /etc/init.d/cron stop
    重启:sudo /etc/init.d/cron restart
    sudo service cron restart
    重新载入配置:sudo /etc/init.d/cron reload

    可以用ps aux | grep cron命令查看cron是否已启动

    2、新增 cron 任务
    推荐使用crontab -u 用户名 -e命令添加自定义的任务(编辑的是/var/spool/cron下对应用户的cron文件,在/var/spool/cron下的crontab文件 不可以直接创建或者直接修改,crontab文件是通过crontab命令得到的)。

    在编辑cron服务时,编辑的内容有一些格式和约定,输入:crontab -u root -e 

    a、直接执行命令行
    每隔5秒打印一个字符串“Hello World”,保存至文件/home/linjiqin/HelloWorld.txt中,cron格式如下:

    */5 * * * *  echo "Hello World" >> /home/linjiqin/HelloWorld.txt

    b、shell文件
    每隔5秒调用一次/home/linjiqin/HelloWorld.sh文件,cron 格式如下:

    */5 * * * *  /home/linjiqin/HelloWorld.sh

    文件/home/linjiqin/HelloWorld.sh的内容如下:

    #!/bin/sh
    cd /home/linjiqin/
    echo "Hello World" >> HelloWorld.txt

    注意:记得编辑过后要重启,不然无效。
    sudo service cron restart
    sudo service cron status
    crontab -l #查看cron
    crontab -e #修改cron

    cron常用范例:

    每隔5秒执行一次:*/5 * * * * ?
    每隔1分钟执行一次:0 */1 * * * ?
    每天23点执行一次:0 0 23 * * ?
    每天凌晨1点执行一次:0 0 1 * * ?
    每月1号凌晨1点执行一次:0 0 1 1 * ?
    每月最后一天23点执行一次:0 0 23 L * ?
    每周星期天凌晨1点实行一次:0 0 1 ? * L
    在26分、29分、33分执行一次:0 26,29,33 * * * ?
    每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?
  • 相关阅读:
    阿里P8架构师谈:阿里双11秒杀系统如何设计?
    秒杀系统设计的知识点
    秒杀系统架构优化思路
    秒杀系统解决方案
    Entity Framework Code First (七)空间数据类型 Spatial Data Types
    Entity Framework Code First (六)存储过程
    Entity Framework Code First (五)Fluent API
    Entity Framework Code First (四)Fluent API
    Entity Framework Code First (三)Data Annotations
    Entity Framework Code First (二)Custom Conventions
  • 原文地址:https://www.cnblogs.com/linjiqin/p/3965046.html
Copyright © 2011-2022 走看看