XTOOLS Django +Python3 + VUE + element实现用户自定义的全适配Linux Crontab
Posted 运维部落
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XTOOLS Django +Python3 + VUE + element实现用户自定义的全适配Linux Crontab相关的知识,希望对你有一定的参考价值。
目录
应用场景前端页面设计方案设计代码逻辑伪代码
应用场景
如果您被如下任何一种情况困扰,那么你可以尝试xtools的crontab功能
手头杂事多,每次下班前检查完记事本未完成工作项才敢下班;
临时需求多,注意力被频繁打断,无法长时间做同一件事情;
答应同事未来某刻要做的事情,却因为各种原因忘记而“被提醒”;
前端页面设计
分、时、日、月、周
完全适配Linux系统Crontab
方案设计
《xtools crontab vue-cron.png》
代码逻辑
用户在前端页面根据提示输入crontab规则
触发提交按钮后,所有参数入库DB
判断是否有crontab规则
如无:1> 立刻运行程序 2> 修改DB cron_status状态 3> 过滤DB cron_status=2的crontab,匹配后删除系统crontab中存在的crontab条目
如有:1> python-cron + django-extensions runscripts 生成系统crontab 2> 过滤DB cron_status=2的crontab,匹配后删除系统crontab中存在的crontab条目 3> 在指定时间点运行任务
伪代码
django 外部调用函数
根据uid查询在数据库中存放对应的参数
*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设置
如果crontab没有设置则直接运行程序
如果crontab设置了,则设置系统crontab,使用python-cron库函数
无论是直接运行还是设置系统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解决