diff --git a/plugins/sphinx/tool_cron.py b/plugins/sphinx/tool_cron.py index c3d128945..cba869c64 100644 --- a/plugins/sphinx/tool_cron.py +++ b/plugins/sphinx/tool_cron.py @@ -31,6 +31,10 @@ def getTaskConf(): conf = getServerDir() + "/cron_config.json" return conf +def getTaskDeltaConf(): + conf = getServerDir() + "/cron_delta_config.json" + return conf + def getConfigData(): try: @@ -45,10 +49,24 @@ def getConfigData(): "minute": "15", } +def getConfigDeltaData(): + try: + return json.loads(mw.readFile(getTaskDeltaConf())) + except: + pass + return { + "task_id": -1, + "period": "minute-n", + "where1": "3", + "hour": "0", + "minute": "0", + } + def createBgTask(): - removeBgTask() + # removeBgTask() createBgTaskByName(getPluginName()) + createBgTaskDeltaByName(getPluginName()) def createBgTaskByName(name): @@ -103,6 +121,58 @@ logs_file=$plugin_path/${rname}.log args["name"] = name mw.writeFile(getTaskConf(), json.dumps(args)) +def createBgTaskDeltaByName(name): + args = getConfigData() + _name = "[勿删]Sphinx增量更新[" + name + "]" + res = mw.M("crontab").field("id, name").where("name=?", (_name,)).find() + if res: + return True + + if "task_id" in args and args["task_id"] > 0: + res = mw.M("crontab").field("id, name").where( + "id=?", (args["task_id"],)).find() + if res and res["id"] == args["task_id"]: + print("计划任务已经存在!") + return True + import crontab_api + api = crontab_api.crontab_api() + + mw_dir = mw.getRunDir() + cmd = ''' +mw_dir=%s +rname=%s +plugin_path=%s +script_path=%s +logs_file=$plugin_path/${rname}.log +''' % (mw_dir, name, getServerDir(), getPluginDir()) + cmd += 'echo "★【`date +"%Y-%m-%d %H:%M:%S"`】 STSRT★" >> $logs_file' + "\n" + cmd += 'echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" >> $logs_file' + "\n" + cmd += 'echo "python3 $script_path/index.py update_delta"' + "\n" + cmd += 'cd $mw_dir && python3 $script_path/index.py update_delta' + "\n" + cmd += 'echo "【`date +"%Y-%m-%d %H:%M:%S"`】 END★" >> $logs_file' + "\n" + cmd += 'echo "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" >> $logs_file' + "\n" + + params = { + 'name': _name, + 'type': args['period'], + 'week': "", + 'where1': args['where1'], + 'hour': args['hour'], + 'minute': args['minute'], + 'save': "", + 'backup_to': "", + 'stype': "toShell", + 'sname': '', + 'sbody': cmd, + 'urladdress': '', + } + + task_id = api.add(params) + if task_id > 0: + args["task_id"] = task_id + args["name"] = name + mw.writeFile(getTaskConf(), json.dumps(args)) + def removeBgTask(): cfg = getConfigData() @@ -119,11 +189,27 @@ def removeBgTask(): return True return False +def removeDeltaBgTask(): + cfg = getConfigDeltaData() + if "task_id" in cfg 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 + mw.writeFile(getTaskDeltaConf(), json.dumps(cfg)) + return True + return False + if __name__ == "__main__": if len(sys.argv) > 1: action = sys.argv[1] if action == "remove": removeBgTask() + removeDeltaBgTask() elif action == "add": createBgTask()