Django定时任务

Django定时任务

在Django执行定时任务,可以通过django-crontab扩展来实现
  1. 安装 django-crontab

    pip install django-crontab
    
  2. 注册 django-crontab 应用

    INSTALLED_APPS = [    
        'django_crontab', # 定时任务
    ]
    
  3. 设置定时任务

    定时时间基本格式 :
    
    *  *  *  *  *
    
    分 时 日 月 周    命令
    
    M: 分钟(0-59)。每分钟用 * 或者 */1 表示
    H:小时(0-23)。(0表示0点)
    D:天(1-31)。
    m: 月(1-12)。
    d: 一星期内的天(0~60为星期天)。
    

    定时任务分为三部分定义:

    • 任务时间
    • 任务方法
    • 任务日志
    CRONJOBS = [
        # 每1分钟生成一次首页静态文件
        ('*/1 * * * *', 'contents.crons.generate_static_index_html', '>> ' + os.path.join(os.path.dirname(BASE_DIR), 'logs/crontab.log'))
    ]
    
  4. 解决 crontab 中文问题

    在定时任务中,如果出现非英文字符,会出现字符异常错误

    CRONTAB_COMMAND_PREFIX = 'LANG_ALL=zh_cn.UTF-8'
    
  5. 管理定时任务

    # 添加定时任务到系统中
    $ python manage.py crontab add
    
    # 显示已激活的定时任务
    $ python manage.py crontab show
    
    # 移除定时任务
    $ python manage.py crontab remove
    
  6. 扩展(crontab循环定时任务(用户执行))

    1. crond服务管理

      # 查看crond是否安装
      systemctl list-unit-files | grep crond
      # 没安装的话
      yum install cronie
      # 设置开机启动
      systemctl enable crond
      # 开机不启动
      systemctl disable crond
      
    2. 访问控制

      当系统中有/etc/cron.allow文件时,只有写入此文件的用户可以使用 crontab命令,
      没有写入的用户不能使用 crontab命令;

      同样如果有此文件,/etc/cron.deny文件会被忽略,/etc/cron.allow文件的优先级更高,当系统中只有/etc/cron.deny文件时,则写入此文件的用户不能使用 crontab命令,没有写入文件的用户可以使用 crontab命令;
      如果系统中这两个文件都不存在,那么只有root用户可以使用crontab命令;

    3. 用户的 crontab设置

      • 选项

        -e:编辑 crontab定时任务
        -l:查询 crontab任务
        -r:删除当前用户所有的 crontab任务
        
      • ****执行的任务

        第一个 *一小时当中的第几分钟0-59
        第二个 *一天当中的第几小时0-23
        第三个 *一个月当中的第几天1-31
        第四个 *一年当中的第几月1-12
        第五个 *一周当中的星期几0-7(0和7都代表星期日)
      • 注意事项

        1. 六个选项都不能为空,必须填写。如果不确定使用“*”代表任意时间;
        2. crontab定时任务,最小有效时间是分钟,最大时间范围是月。像2018年某时执行,3点30分30秒这样的时间都不能识别;
        3. 在定义时间时,日期和星期最好不要在一条定时任务中出现,因为它们都是以天作为单位,非常容易让管理员混乱;
        4. 在定时任务中,不管是直接写命令,还是在脚本中写命令,最好都是用绝对路径;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值