From 0268a97e6df507f2da81c0fdf4285b9569772f5e Mon Sep 17 00:00:00 2001 From: midoks Date: Sat, 30 Jul 2022 18:05:21 +0800 Subject: [PATCH] =?UTF-8?q?rsync=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1=20xx5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/rsyncd/index.py | 3 + plugins/rsyncd/tool_task.py | 149 ++++++++++++++++++++++++++++++++++++ 2 files changed, 152 insertions(+) create mode 100644 plugins/rsyncd/tool_task.py diff --git a/plugins/rsyncd/index.py b/plugins/rsyncd/index.py index 1f7179b9c..4351c248a 100755 --- a/plugins/rsyncd/index.py +++ b/plugins/rsyncd/index.py @@ -589,6 +589,9 @@ def makeLsyncdConf(data): lsyncdReload() + import tool_task + tool_task.createBgTask(lsyncd_list) + def lsyncdListFindIp(slist, ip): for x in range(len(slist)): diff --git a/plugins/rsyncd/tool_task.py b/plugins/rsyncd/tool_task.py new file mode 100644 index 000000000..ac386c222 --- /dev/null +++ b/plugins/rsyncd/tool_task.py @@ -0,0 +1,149 @@ +# coding:utf-8 + +import sys +import io +import os +import time +import json + +sys.path.append(os.getcwd() + "/class/core") +import mw + + +app_debug = False +if mw.isAppleSystem(): + app_debug = True + + +def getPluginName(): + return 'rsyncd' + + +def getPluginDir(): + return mw.getPluginDir() + '/' + getPluginName() + + +def getServerDir(): + return mw.getServerDir() + '/' + getPluginName() + + +def getTaskConf(): + conf = getServerDir() + "/task_config.json" + return conf + + +def getConfigData(): + try: + return json.loads(mw.readFile(getTaskConf())) + except: + pass + return [] + + +def getConfigTpl(): + tpl = { + "name": "", + "task_id": -1, + } + return tpl + + +def createBgTask(data): + for d in data: + if d['realtime'] == "false": + removeBgTask() + createBgTaskByName(d['name'], d) + + +def createBgTaskByName(name, args): + cfg = getConfigTpl() + _name = "[勿删]同步插件定时任务[" + name + "]" + res = mw.M("crontab").field("id, name").where("name=?", (_name,)).find() + if res: + return True + + if "task_id" in cfg.keys() and cfg["task_id"] > 0: + res = mw.M("crontab").field("id, name").where( + "id=?", (cfg["task_id"],)).find() + if res and res["id"] == cfg["task_id"]: + print("计划任务已经存在!") + return True + import crontab_api + api = crontab_api.crontab_api() + + period = args['period'] + _hour = '' + _minute = '' + _where1 = '' + _type_day = "day" + if period == 'day': + _type_day = 'day' + _hour = args['hour'] + _minute = args['minute'] + elif period == 'minute-n': + _type_day = 'minute-n' + _where1 = args['minute-n'] + _minute = '' + + cmd = ''' +rname=%s +plugin_path=%s +logs_file=$plugin_path/send/${rname}/run.log +''' % (name, getServerDir()) + cmd += 'echo "★【`date +"%Y-%m-%d %H:%M:%S"`】 STSRT" >> $logs_file' + "\n" + cmd += 'echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" >> $logs_file' + "\n" + cmd += 'bash $plugin_path/send/${rname}/cmd >> $logs_file 2>&1' + "\n" + cmd += 'echo "【`date +"%Y-%m-%d %H:%M:%S"`】 END★" >> $logs_file' + "\n" + cmd += 'echo "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" >> $logs_file' + "\n" + + params = { + 'name': _name, + 'type': _type_day, + 'week': "", + 'where1': _where1, + 'hour': _hour, + 'minute': _minute, + 'save': "", + 'backup_to': "", + 'stype': "toShell", + 'sname': '', + 'sbody': cmd, + 'urladdress': '', + } + + task_id = api.add(params) + if task_id > 0: + cfg["task_id"] = task_id + cfg["name"] = name + + _dd = getConfigData() + _dd.append(cfg) + mw.writeFile(getTaskConf(), json.dumps(_dd)) + + +def removeBgTask(): + cfg_list = getConfigData() + for x in range(len(cfg_list)): + cfg = cfg_list[x] + if "task_id" in cfg.keys() and cfg["task_id"] > 0: + res = mw.M("crontab").field("id, name").where( + "id=?", (cfg["task_id"],)).find() + if res and res["id"] == cfg["task_id"]: + import crontab_api + api = crontab_api.crontab_api() + data = api.delete(cfg["task_id"]) + if data[0]: + cfg["task_id"] = -1 + cfg_list[x] = cfg + mw.writeFile(getTaskConf(), '[]') + return True + return False + + +if __name__ == "__main__": + if len(sys.argv) > 1: + action = sys.argv[1] + if action == "remove": + removeBgTask() + elif action == "add": + createBgTask()