XTOOLS Django +Python3 + VUE + element实现用户自定义的全适配Linux Crontab

Posted 运维部落

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XTOOLS Django +Python3 + VUE + element实现用户自定义的全适配Linux Crontab相关的知识,希望对你有一定的参考价值。

目录

应用场景前端页面设计方案设计代码逻辑伪代码

应用场景

如果您被如下任何一种情况困扰,那么你可以尝试xtools的crontab功能

  • 手头杂事多,每次下班前检查完记事本未完成工作项才敢下班;

  • 临时需求多,注意力被频繁打断,无法长时间做同一件事情;

  • 答应同事未来某刻要做的事情,却因为各种原因忘记而“被提醒”;

前端页面设计

  • 分、时、日、月、周完全适配Linux系统Crontab

    【XTOOLS 】Django +Python3 + VUE + element实现用户自定义的全适配Linux Crontab

方案设计


《xtools crontab vue-cron.png》


代码逻辑

  1. 用户在前端页面根据提示输入crontab规则

  2. 触发提交按钮后,所有参数入库DB

  3. 判断是否有crontab规则

  4. 如无:1> 立刻运行程序  2> 修改DB cron_status状态 3> 过滤DB cron_status=2的crontab,匹配后删除系统crontab中存在的crontab条目

  5. 如有:1> python-cron + django-extensions runscripts 生成系统crontab 2> 过滤DB cron_status=2的crontab,匹配后删除系统crontab中存在的crontab条目 3> 在指定时间点运行任务

伪代码

  • django 外部调用函数

  1. 根据uid查询在数据库中存放对应的参数

  2. *args接收所有的外部参数,函数内部做分析处理

def run(*args):
    for arg in args:
        crons = CronInfo.objects.filter(uniqueid=arg)
        for i in crons:
            ip_list = i.ip_list
            dest_path = i.dest_path
            formark = i.forcemark
            src_path = i.src_path
            dest_name = i.dest_name
            compresstype = i.compresstype
            cron = i.cron
            flag = i.flag
            uniqueid = i.uniqueid
            forcemark = i.forcemark
            hosts = hosts_compose(ip_list)

            try:
                result = running(hosts, dest_path, forcemark, src_path, dest_name, compresstype, cron, uniqueid, flag, CronInfo)
                return result
            except:
                i.runlog = 'error 1005 system_crontab_run'
                return json_response(error='error 1005 system_crontab_run')
  • 任务运行&系统crontab设置

  1. 如果crontab没有设置则直接运行程序

  2. 如果crontab设置了,则设置系统crontab,使用python-cron库函数

  3. 无论是直接运行还是设置系统crontab,都会根据DB中cron_status清理系统crontab

# 如果cron没有设置则直接运行程序
if cron == '':
    print('直接运行')
    result = running(hosts, dest_path, forcemark, src_path, dest_name, compresstype, cron, uniqueid, flag, CronInfo)
    cron_del(user_cron, CronInfo, cron_status, cron)
    return result
else:
    try:
        # 写系统crontab
        print('Write system crontab')
        job = user_cron.new(command='python manage.py runscript system_crontab_run --script-args ' + uniqueid)
        job.setall(cron)
        job.set_comment('AutomaticTools crontab ' + uniqueid)
        user_cron.write()
        # 删除已执行结束的系统crontab
        cron_del(user_cron, CronInfo, cron_status, cron)
        return json_response('以crontab的方式运行')
    except:
        return json_response(error='error 1004')
  • cron_status 状态设置函数和系统crontab清理逻辑

def cron_status(CronInfo, uniqueid):
    crons = CronInfo.objects.filter(uniqueid=uniqueid)
    for i in crons:
        i.cron_status = 2
        i.save()

def cron_del(user_cron, CronInfo, cron_status, cron):
    crons = CronInfo.objects.filter(~Q(cron=''), cron_status=2)
    for i in crons:
        uniqueid = i.uniqueid
        objs = user_cron.find_comment('AutomaticTools crontab ' + uniqueid)
        if objs:
            for obj in objs:
                user_cron.remove(obj)
            user_cron.write()


上期回顾:



下期预告:

Django Restful API入门及设计

【the end】


长按关注运维部落(linux178)↓



以上是关于XTOOLS Django +Python3 + VUE + element实现用户自定义的全适配Linux Crontab的主要内容,如果未能解决你的问题,请参考以下文章

Django:Python3.6.2+Django2.0配置MySQL

Django]Django Python3出现Error loading MySQLdb module解决

mac电脑安装django ,运行django报错解决

创建项目以及django路由规则(环境必备 python3.7 django 2.1.3)

Python3 之Web 框架:Django 基础

python3第18章Django入门