mdserver-web/plugins/sphinx/tool_cron.py

212 lines
5.9 KiB
Python
Raw Permalink Normal View History

2024-06-26 05:32:22 -04:00
# coding:utf-8
import sys
import io
import os
import time
import json
2024-11-23 17:02:41 -05:00
web_dir = os.getcwd() + "/web"
if os.path.exists(web_dir):
sys.path.append(web_dir)
os.chdir(web_dir)
import core.mw as mw
from utils.crontab import crontab as MwCrontab
2024-06-26 05:32:22 -04:00
app_debug = False
if mw.isAppleSystem():
app_debug = True
def getPluginName():
return 'sphinx'
def getPluginDir():
return mw.getPluginDir() + '/' + getPluginName()
def getServerDir():
return mw.getServerDir() + '/' + getPluginName()
def getTaskConf():
2024-06-26 05:49:26 -04:00
conf = getServerDir() + "/cron_config.json"
2024-06-26 05:32:22 -04:00
return conf
2024-06-26 07:17:12 -04:00
def getTaskDeltaConf():
conf = getServerDir() + "/cron_delta_config.json"
return conf
2024-06-26 05:32:22 -04:00
def getConfigData():
2024-11-23 17:02:41 -05:00
conf = getTaskConf()
if os.path.exists(conf):
2024-06-26 05:32:22 -04:00
return json.loads(mw.readFile(getTaskConf()))
return {
"task_id": -1,
"period": "day-n",
2024-06-26 05:46:37 -04:00
"where1": "1",
2024-06-26 05:32:22 -04:00
"hour": "0",
"minute": "15",
}
2024-06-26 07:17:12 -04:00
def getConfigDeltaData():
2024-11-23 17:02:41 -05:00
conf = getTaskDeltaConf()
if os.path.exists(conf):
2024-06-26 07:17:12 -04:00
return json.loads(mw.readFile(getTaskDeltaConf()))
return {
"task_id": -1,
"period": "minute-n",
"where1": "3",
"hour": "0",
"minute": "0",
}
2024-06-26 05:32:22 -04:00
def createBgTask():
2024-06-26 07:19:00 -04:00
removeBgTask()
removeDeltaBgTask()
2024-06-26 05:32:22 -04:00
createBgTaskByName(getPluginName())
2024-06-26 07:17:12 -04:00
createBgTaskDeltaByName(getPluginName())
2024-06-26 07:19:00 -04:00
return True
2024-06-26 05:32:22 -04:00
def createBgTaskByName(name):
args = getConfigData()
2024-06-26 06:06:22 -04:00
_name = "[勿删]Sphinx全量更新[" + name + "]"
2024-06-26 05:32:22 -04:00
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:
2024-11-23 17:02:41 -05:00
res = mw.M("crontab").field("id, name").where("id=?", (args["task_id"],)).find()
2024-06-26 05:32:22 -04:00
if res and res["id"] == args["task_id"]:
print("计划任务已经存在!")
return True
2024-11-23 17:02:41 -05:00
mw_dir = mw.getPanelDir()
2024-06-26 05:32:22 -04:00
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"
2024-06-26 07:06:38 -04:00
cmd += 'echo "python3 $script_path/index.py update_all"' + "\n"
2024-06-26 07:05:08 -04:00
cmd += 'cd $mw_dir && python3 $script_path/index.py update_all' + "\n"
2024-06-26 05:32:22 -04:00
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,
2024-11-23 17:10:07 -05:00
'url_address': '',
2024-06-26 05:32:22 -04:00
}
2024-11-23 17:02:41 -05:00
task_id = MwCrontab.instance().add(params)
2024-06-26 05:32:22 -04:00
if task_id > 0:
args["task_id"] = task_id
args["name"] = name
mw.writeFile(getTaskConf(), json.dumps(args))
2024-06-26 07:17:12 -04:00
def createBgTaskDeltaByName(name):
2024-06-26 07:20:23 -04:00
args = getConfigDeltaData()
2024-06-26 07:17:12 -04:00
_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:
2024-11-23 17:02:41 -05:00
res = mw.M("crontab").field("id, name").where("id=?", (args["task_id"],)).find()
2024-06-26 07:17:12 -04:00
if res and res["id"] == args["task_id"]:
print("计划任务已经存在!")
return True
2024-11-23 17:02:41 -05:00
mw_dir = mw.getPanelDir()
2024-06-26 07:17:12 -04:00
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,
2024-11-23 17:05:18 -05:00
'url_address': '',
2024-06-26 07:17:12 -04:00
}
2024-11-23 17:02:41 -05:00
task_id = MwCrontab.instance().add(params)
2024-06-26 07:17:12 -04:00
if task_id > 0:
args["task_id"] = task_id
args["name"] = name
mw.writeFile(getTaskConf(), json.dumps(args))
2024-06-26 05:32:22 -04:00
def removeBgTask():
cfg = getConfigData()
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"]:
2024-11-23 17:02:41 -05:00
data = MwCrontab.instance().delete(cfg["task_id"])
2025-09-15 12:26:11 -04:00
if data['status']:
2024-06-26 05:32:22 -04:00
cfg["task_id"] = -1
2024-06-26 06:06:22 -04:00
mw.writeFile(getTaskConf(), json.dumps(cfg))
2024-06-26 05:32:22 -04:00
return True
return False
2024-06-26 07:17:12 -04:00
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"]:
2024-11-23 17:02:41 -05:00
data = MwCrontab.instance().delete(cfg["task_id"])
2025-09-15 12:26:11 -04:00
if data['status']:
2024-06-26 07:17:12 -04:00
cfg["task_id"] = -1
mw.writeFile(getTaskDeltaConf(), json.dumps(cfg))
return True
return False
2024-06-26 05:32:22 -04:00
if __name__ == "__main__":
if len(sys.argv) > 1:
action = sys.argv[1]
if action == "remove":
removeBgTask()
2024-06-26 07:17:12 -04:00
removeDeltaBgTask()
2024-06-26 05:32:22 -04:00
elif action == "add":
createBgTask()