利用django admin后台配置celery定时任务

1、安装djcelery

pip install django-celery

2、在Django项目setting配置

A、配置djcelery

# CELERY STUFF
import djcelery
djcelery.setup_loader()
BROKER_URL = ‘redis://localhost:6379‘
CELERYBEAT_SCHEDULER = ‘djcelery.schedulers.DatabaseScheduler‘ # 定时任务
CELERY_RESULT_BACKEND = ‘djcelery.backends.database:DatabaseBackend‘
CELERY_RESULT_BACKEND = ‘redis://localhost:6379‘
CELERY_ACCEPT_CONTENT = [‘application/json‘]
CELERY_TASK_SERIALIZER = ‘json‘
CELERY_RESULT_SERIALIZER = ‘json‘
CELERY_TIMEZONE = ‘Asia/Shanghai‘

B、配置APPS

INSTALLED_APPS = (
    # ‘bootstrap_admin‘,
    ‘django.contrib.admin‘,
    ‘django.contrib.auth‘,
    ‘django.contrib.contenttypes‘,
    ‘django.contrib.sessions‘,
    ‘django.contrib.messages‘,
    ‘django.contrib.staticfiles‘,
    ‘djcelery‘,    )

3、创建一个用Saltstack API收集主机信息task

from celery import task
from saltstack.saltapi import SaltAPI

@task
def server_collects(tgt,server_id):
    contexts = {‘server_list‘: server_list, ‘server_id‘: server_id}
    try:
        sapi = SaltAPI(url="http://192.168.62.200:8000", username="kbson", password="kbson")

        grains = sapi.SaltCmd(tgt=tgt, fun=‘grains.items‘, client=‘local‘)[‘return‘][0]
        minions = sapi.key_list(‘manage.status‘, client=‘runner‘)[‘return‘][0]
        if salt_server and grains:
            for i in grains.keys():
                try:
                    server = Servers.objects.get(local_ip=i)
                except:
                    server = Servers()
                if i in minions[‘up‘]:
                    minions_status = ‘0‘
                else:
                    minions_status = ‘1‘
                server.hostname = grains[i][‘host‘]
                server.local_ip = grains[i][‘id‘]
                server.OS = grains[i][‘os‘] + ‘ ‘ + grains[i][‘osrelease‘] + ‘-‘ + grains[i][‘osarch‘]
                server.Mem = grains[i][‘mem_total‘]
                server.Cpus = grains[i][‘num_cpus‘]
                server.Cpu_type = grains[i][‘cpu_model‘]
                server.minion_id = grains[i][‘id‘]
                server.app = grains[i][‘virtual‘]
                server.server_status = minions_status
                server.save()
                contexts.update({‘success‘: u‘%s 收集成功‘ % tgt})
        if not grains:
            contexts.update({‘error‘: u‘%s 主机不存在或者离线‘ % tgt})
    except Exception as e:
        contexts.update({‘error‘: ‘%s %s‘ % (tgt, e)})
    return contexts

4、配置supervisor守护进程来启动celery,启动worker与beat进程

worker:执行任务的消费者,通常会在多台服务器运行多个消费者来提高执行效率。

beat:任务调度器,Beat进程会读取配置文件的内容,周期性地将配置中到期需要执行的任务发送给任务队列。 Celerybeat会保持运行, 一旦到了某一定时任务需要执行时, Celerybeat便将其加入到queue中. 不像worker进程, Celerybeat只有需要一个即可.

[program:DJ.celeryd]
command=/usr/local/python27/bin/python  /data/PRG/saltruler/manage.py celery worker --loglevel=info
user=root
numprocs=1
directory=/data/PRG/saltruler
stdout_logfile=/var/log/celery_worker.log
stderr_logfile=/var/log/celery_worker.log
autostart=true
autorestart=true
startsecs=10
stopwaitsecs = 120
priority=998

[program:DJ.celerybeat]
command=/usr/local/python/bin/python /data/PRG/saltruler/manage.py celery beat --schedule=/tmp/celerybeat-schedule --pidfile=/tmp/django_celerybeat.pid --loglevel=INFO
user=root
numprocs=1
directory=/data/PRG/saltruler
stdout_logfile=/var/log/celery_beat.log
stderr_logfile=/var/log/celery_beat.log
autostart=true
autorestart=true
startsecs=10
stopwaitsecs = 120
priority=998

5、Django后台配置celery定时任务

访问Django后台http://192.168.62.200:8000/admin/djcelery/periodictask/

添加periodic task

查看添加的定时任务

查看后台日志是否有执行,正常执行日志输入类似如下内容

[2017-04-20 13:30:00,001: INFO/Beat] Scheduler: Sending due task update cmdb (saltstack.tasks.server_collects)
[2017-04-20 13:30:00,006: INFO/MainProcess] Received task: saltstack.tasks.server_collects[f46d2c70-1550-4dec-b5aa-036fbffd2a5f]
[2017-04-20 13:30:00,058: WARNING/Worker-18] https://192.168.62.200:8000
[2017-04-20 13:30:07,163: INFO/MainProcess] Task saltstack.tasks.server_collects[f46d2c70-1550-4dec-b5aa-036fbffd2a5f] succeeded in 7.15584068373s: {‘server_id‘: 1L, ‘success‘: u‘* \u6536\u96c6\u6210\u529f‘, ‘server_list‘: <QuerySet [<SaltServer: games -...
[2017-04-20 13:31:49,945: INFO/Beat] Writing entries (1)...
时间: 2024-10-11 16:49:24

利用django admin后台配置celery定时任务的相关文章

Django Admin后台添加用户时出现报错:1452

如果在使用Django Admin后台添加用户时出现报错: (1452, 'Cannot add or update a child row: a foreign key constraint fails (`mxproject`.`django_admin_log`, CONSTRAINT `django_admin_log_user_id_c564eba6_fk_auth_user_id` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id

Django Admin Cookbook-14如何在Django Admin后台移除“删除所选”操作

14.如何在Django Admin后台移除"删除所选"操作? 默认情况下,Django Admin后台的listview模型列表页,会有一个Delete Selected删除所选操作.假设你需要再从Hero管理模型中移除该删除操作. ModelAdmin.get_actions方法可以返回所有的操作方法.通过覆盖此方法,移除其中delete_selected方法,便可可以从下拉列表中删除它.将Hero管理模型的代码修改如下: def get_actions(self, request

Django Admin Cookbook-38如何获取特定对象的Django Admin后台URL

38.如何获取特定对象的Django Admin后台URL? Hero模型有一个children字段,显示每个英雄的孩子的名字.你被要求将每个childrin链接到Hero模型更改页面.实现如下: @admin.register(Hero) class HeroAdmin(admin.ModelAdmin, ExportCsvMixin): ... def children_display(self, obj): display_text = ", ".join([ "<

Django Admin后台管理模块的使用

Admin后台管理模块的使用 Django的管理员模块是Django的标准库django.contrib的一部分.这个包还包括其它一些实用的模块: django.contrib.auth django.contrib.sessions django.contrib.comments 激活admin模块的方法是: 1. 在INSTALLED_APPS设置文件中,加入'django.contrib.admin' 2. 再添加 'django.contrib.auth', 'django.contri

CMDB之Django admin 后台app操作

Django的后台功能非常实用: 首先需注册app到后台 cat asset/apps.py from __future__ import unicode_literals from django.apps import AppConfig class AssetConfig(AppConfig):     name = 'asset'     verbose_name = '环境列表'   # 后台显示的名称      cat asset/admin.py from django.contri

django admin后台管理数据复选框的使用

1.admin后台管理数据表,首先需要在admin.py中注册models # -*- coding: utf-8 -*- from __future__ import unicode_literals from django.contrib import admin from .models import test_table from .models import person ''' class ngo_base_info_admin(admin.ModelAdmin): list_dis

Django Admin Cookbook-24如何从两个不同的模型创建一个Django Admin后台页面

24.如何从两个不同的模型创建一个Django管理员? Hero模型外联到Category,因此你可以从Hero管理页面中选择一个Category对象.如果还希望能够从Hero管理页面创建及修改Category对象,则可以更改HeroAdmin管理模型,并自定义 save_model行为. class HeroForm(forms.ModelForm): category_name = forms.CharField() class Meta: model = Hero exclude = ["

Django --&gt;admin后台(后台管理可以直接往数据库添加数据)

一.使用pymysql时,必须加这两行(#如果使用mysql的数据库,请进行伪装 pymysql伪装为MySQLdb) import pymysqlpymysql.install_as_MySQLdb() #如果使用mysql的数据库,请进行伪装 pymysql伪装为MySQLdb 二.编辑数据库内容 (路径:/学习/接口自动化/mjz/user/models.py) from django.db import models # Create your models here. class Ca

Django admin后台操作

Django提供自动后台管理应用,简称admin. admin是一个应用,每个Web站点都需要它.admin通过让开发者可以在完成完整的UI之前验证处理数据的代码. 设置admin 打开settings.py INSTALLED_APPS = ( 'django.contrib.admin', #取消掉这行的注释 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.con