首页 > 自动化运维 > Django > django-crontab 插件定时执行任务
2018
06-12

django-crontab 插件定时执行任务

需求

  需要定时执行django的一个函数,由于函数中使用了django的orm,需要从数据库获取数据,所有就没有考虑单独写脚本去执行,为什么不写,,太麻烦。。。

django-crontab 优点  可以 直接调用 Django 的函数

安装

pip install django-crontab

配置

添加app名称到 settings.py中

INSTALLED_APPS = (       
 'django_crontab',      
  ...
    )

到这里基本没有问题。 

然后我们通过调用自定义函数去执行定时任务

首先在原来的app 中(与view.py同级)新建一个cron.py 名字可以任意,其实也可以放在view.py中,新建文件方便管理。)

def test():
    print 123
    #你要执行的任务函数

在 settings.py中的最后增加

CRONJOBS = [
    ('*/1 * * * *', 'appname.cron.test','>>/home/test.log')
]

需要说明的是, 

‘/5 * * *’ 遵循的是crontab 语法。

‘appname.cron.test’,这个appname就是你开发时加入到settings中的那个。因为你的cron.py文件就在这个下面,否则找不到路径。cron 就是你自己起的任务文件的名字。test就是执行的函数中的内容。

‘>>/home/test.log’,通常会输出信息到一个文件中,就使用这个方法,注意的是‘>>’表示追加写入,’>’表示覆盖写入

启动

以上都完成后,需要执行 

python manage.py crontab add 将任务添加并生效
显示当前的定时任务 python manage.py crontab show
删除所有定时任务 python manage.py crontab remove
重启django服务。
执行 crontab -l  应该是可以看到系统中创建了该定时任务。

问题:

配置完成后,通过crontab -l 查询crontab 执行的命令 然后手动运行发现报错 内容为 ‘No handlers cloud be found  for logger  "django_crontab.crontab" ’

意思是说系统日志模块里没有配置"django_crontab.crontab"这个handler,so,我们需要自己在setting中配置出这个handler:

LOGGING = {  
    'version': 1,  
    'disable_existing_loggers': False,  
    'formatters': {  
        'verbose': {  
            'format': "%(asctime)s %(levelname)s %(message)s",  
            'datefmt': "%a, %d %b %Y %H:%M:%S"  
        },  
    },  
    'handlers': {  
        'django_crontab': {  
            'level': 'DEBUG',  
            'class': 'logging.FileHandler',  
            'filename': 'django_crontab.log',  
            'formatter': 'verbose'  
        },  
    },  
    'loggers': {  
        'django_crontab.crontab': {  
            'handlers': ['django_crontab'],  
            'level': 'DEBUG',  
            'propagate': True,  
        },  
  
    }  
}

然后就可以愉快的使用了。




最后编辑:
作者:tshare365
这个作者貌似有点懒,什么都没有留下。
捐 赠您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请狠狠点击

留下一个回复