# 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 'op_waf' 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(): removeBgTask() args = { "period": "minute-n", "minute-n": "1", } if mw.isAppleSystem(): createBgTaskByName(getPluginName(), args) def createBgTaskByName(name, args): cfg = getConfigTpl() _name = "[勿删]OP防火墙后台任务[" + 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 cron_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 = '' 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" if mw.isAppleSystem(): cmd += 'echo "cd $mw_dir && source bin/activate && python3 $script_path/tool_task.py run >> $logs_file 2>&1"' + "\n" cmd += 'cd $mw_dir && source bin/activate && python3 $script_path/tool_task.py run >> $logs_file 2>&1' + "\n" else: cmd += 'echo "cd $mw_dir && source bin/activate && bash $script_path/shell/cpu_usage_file.sh >> $logs_file 2>&1"' + "\n" cmd += 'cd $mw_dir && source bin/activate && bash $script_path/shell/cpu_usage.sh >> $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 = cron_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(): if not mw.isAppleSystem(): return False 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 def getCpuUsed(): path = getServerDir() + "/cpu.info" if mw.isAppleSystem(): import psutil used = psutil.cpu_percent(interval=1) mw.writeFile(path, str(int(used))) else: cmd = "top -bn 1 | fgrep 'Cpu(s)' | awk '{print 100 -$8}' | awk -F . '{print $1}'" data = mw.execShell(cmd) mw.writeFile(path, str(int(data[0].strip()))) def run(): getCpuUsed() if __name__ == "__main__": if len(sys.argv) > 1: action = sys.argv[1] if action == "remove": removeBgTask() elif action == "add": createBgTask() elif action == "run": run()