From 10c58a72ce82e9145a801db10dd059946395fb62 Mon Sep 17 00:00:00 2001 From: hrx <18603305412@163.com> Date: Thu, 20 Nov 2025 10:14:52 +0800 Subject: [PATCH 1/8] updata --- f/web-kboss/src/main.js | 132 ++++++++++++++++++ .../customerInformationList/index.vue | 1 - f/web-kboss/vue.config.js | 40 ++++++ 3 files changed, 172 insertions(+), 1 deletion(-) diff --git a/f/web-kboss/src/main.js b/f/web-kboss/src/main.js index a8cef51..504e5c6 100644 --- a/f/web-kboss/src/main.js +++ b/f/web-kboss/src/main.js @@ -90,6 +90,138 @@ Vue.use(HappyScroll) // mockXHR() // } +// ==================== 防 F12 和右键检查功能开始 ==================== +// 只在生产环境启用防调试功能 +if (process.env.NODE_ENV === 'production') { + // 禁止右键菜单 + document.addEventListener('contextmenu', function(e) { + e.preventDefault(); + return false; + }); + + // 禁止F12和开发者工具快捷键 + document.addEventListener('keydown', function(e) { + // 禁止F12 + if (e.key === 'F12') { + e.preventDefault(); + return false; + } + + // 禁止Ctrl+Shift+I (Chrome, Edge) + if (e.ctrlKey && e.shiftKey && e.key === 'I') { + e.preventDefault(); + return false; + } + + // 禁止Ctrl+Shift+J (Chrome) + if (e.ctrlKey && e.shiftKey && e.key === 'J') { + e.preventDefault(); + return false; + } + + // 禁止Ctrl+U (查看源代码) + if (e.ctrlKey && e.key === 'u') { + e.preventDefault(); + return false; + } + + // 禁止Ctrl+Shift+C (开发者工具检查元素) + if (e.ctrlKey && e.shiftKey && e.key === 'C') { + e.preventDefault(); + return false; + } + + // 禁止Ctrl+Shift+J (Firefox) + if (e.ctrlKey && e.shiftKey && e.key === 'K') { + e.preventDefault(); + return false; + } + }); + + // 检测开发者工具是否打开 + let lastTime = Date.now(); + function checkDebugger() { + const currentTime = Date.now(); + if (currentTime - lastTime > 100) { + // 如果时间差大于100ms,可能是在调试 + handleDebuggerDetected(); + } + lastTime = currentTime; + } + + // 处理检测到调试器的情况 + function handleDebuggerDetected() { + // 可以采取以下措施之一: + + // 1. 显示警告信息(推荐) + alert('检测到开发者工具已打开,为了系统安全,请关闭开发者工具。'); + + // 2. 跳转到关于页面或其他安全页面 + // window.location.href = '/about'; + + // 3. 清空敏感数据 + // sessionStorage.clear(); + // localStorage.clear(); + + // 4. 关闭窗口(慎用) + // window.close(); + } + + // 定期检查 + setInterval(function() { + checkDebugger(); + // 使用debugger检测 + (function() { + const startTime = Date.now(); + debugger; + const endTime = Date.now(); + if (endTime - startTime > 100) { + handleDebuggerDetected(); + } + })(); + }, 1000); + + // 禁用控制台输出(可选,根据需求开启) + // 注意:这会影响你自己的console.log调试,建议只在生产环境使用 + if (typeof console !== 'undefined') { + const noop = () => {}; + const methods = ['log', 'debug', 'info', 'warn', 'error', 'table', 'dir', 'trace']; + methods.forEach(method => { + console[method] = noop; + }); + + // 防止重写console被绕过 + Object.defineProperty(window, 'console', { + get: function() { + return { + log: noop, debug: noop, info: noop, warn: noop, error: noop, + table: noop, dir: noop, trace: noop + }; + }, + set: function() {} + }); + } + + // 检测窗口大小变化(开发者工具打开时窗口大小会变化) + let lastWidth = window.innerWidth; + let lastHeight = window.innerHeight; + + window.addEventListener('resize', function() { + const currentWidth = window.innerWidth; + const currentHeight = window.innerHeight; + + if (Math.abs(currentWidth - lastWidth) > 100 || Math.abs(currentHeight - lastHeight) > 100) { + handleDebuggerDetected(); + } + + lastWidth = currentWidth; + lastHeight = currentHeight; + }); + + console.log('防调试保护已启用'); +} +// ==================== 防 F12 和右键检查功能结束 ==================== + Vue.use(Element, { size: Cookies.get('size') || 'medium' // set element-ui default size // locale: enLang // 如果使用中文,无需设置,请删除 diff --git a/f/web-kboss/src/views/sales/customerManagement/customerInformationList/index.vue b/f/web-kboss/src/views/sales/customerManagement/customerInformationList/index.vue index 939e66d..e619926 100644 --- a/f/web-kboss/src/views/sales/customerManagement/customerInformationList/index.vue +++ b/f/web-kboss/src/views/sales/customerManagement/customerInformationList/index.vue @@ -403,7 +403,6 @@ export default { background-color: #f5f7fa; min-height: calc(100vh - 40px); box-sizing: border-box; - .table-container { background: #fff; border-radius: 8px; diff --git a/f/web-kboss/vue.config.js b/f/web-kboss/vue.config.js index 9bee4dc..ac1ec45 100644 --- a/f/web-kboss/vue.config.js +++ b/f/web-kboss/vue.config.js @@ -94,6 +94,32 @@ module.exports = { alias: { '@': resolve('src') } + }, + // 生产环境去除console和debugger + optimization: { + minimizer: [ + { + apply: (compiler) => { + // 只在生产环境生效 + if (process.env.NODE_ENV === 'production') { + const TerserPlugin = require('terser-webpack-plugin') + new TerserPlugin({ + terserOptions: { + compress: { + drop_console: true, // 移除console + drop_debugger: true, // 移除debugger + pure_funcs: ['console.log', 'console.info', 'console.warn', 'console.error'] // 移除特定的console方法 + }, + mangle: true, // 代码混淆 + output: { + comments: false // 移除注释 + } + } + }).apply(compiler) + } + } + } + ] } }, chainWebpack(config) { @@ -128,6 +154,8 @@ module.exports = { symbolId: 'icon-[name]' }) .end() + + // 生产环境配置 config .when(process.env.NODE_ENV !== 'development', config => { @@ -165,7 +193,19 @@ module.exports = { }) // https:// webpack.js.org/configuration/optimization/#optimizationruntimechunk config.optimization.runtimeChunk('single') + + // 生产环境启用代码压缩和优化 + config.optimization.minimize(true) } ) + + // 添加防调试插件配置(可选) + if (process.env.NODE_ENV === 'production') { + // 可以在这里添加其他生产环境特定的防调试配置 + config.plugin('define').tap(args => { + args[0]['process.env'].DISABLE_DEBUG = 'true' + return args + }) + } } } From bcf186539c0bb3365fdae18b2771eef5906a1e64 Mon Sep 17 00:00:00 2001 From: hrx <18603305412@163.com> Date: Thu, 20 Nov 2025 10:27:14 +0800 Subject: [PATCH 2/8] updata --- f/web-kboss/src/main.js | 142 +++++++++++++++++++++++++++------------- 1 file changed, 96 insertions(+), 46 deletions(-) diff --git a/f/web-kboss/src/main.js b/f/web-kboss/src/main.js index 504e5c6..5eadf49 100644 --- a/f/web-kboss/src/main.js +++ b/f/web-kboss/src/main.js @@ -138,48 +138,114 @@ if (process.env.NODE_ENV === 'production') { } }); - // 检测开发者工具是否打开 - let lastTime = Date.now(); - function checkDebugger() { - const currentTime = Date.now(); - if (currentTime - lastTime > 100) { - // 如果时间差大于100ms,可能是在调试 - handleDebuggerDetected(); - } - lastTime = currentTime; + // 更准确的开发者工具检测 + let isDevToolsOpened = false; + + // 方法1: 检查开发者工具宽度 + function checkDevToolsByWidth() { + const threshold = 160; // 开发者工具通常至少160px宽 + const widthThreshold = window.outerWidth - window.innerWidth > threshold; + const heightThreshold = window.outerHeight - window.innerHeight > threshold; + + return widthThreshold || heightThreshold; + } + + // 方法2: 检查debugger执行时间(更宽松的阈值) + function checkDevToolsByDebugger() { + return new Promise((resolve) => { + const start = performance.now(); + debugger; + const end = performance.now(); + // 使用更宽松的阈值,避免误报 + resolve(end - start > 200); + }); + } + + // 方法3: 检查控制台是否打开 + function checkDevToolsByConsole() { + const element = new Image(); + Object.defineProperty(element, 'id', { + get: function() { + isDevToolsOpened = true; + } + }); + + console.log(element); + console.clear(); // 清除测试日志 + } + + // 方法4: 检查Eruda等移动端调试工具 + function checkMobileDevTools() { + return !!(window.eruda || window.__eruda || window.vConsole); } // 处理检测到调试器的情况 function handleDebuggerDetected() { - // 可以采取以下措施之一: + if (!isDevToolsOpened) { + isDevToolsOpened = true; - // 1. 显示警告信息(推荐) - alert('检测到开发者工具已打开,为了系统安全,请关闭开发者工具。'); + // 可以选择以下一种或多种处理方式 + // 1. 显示警告信息(推荐) + alert('检测到开发者工具已打开,为了系统安全,请关闭开发者工具。'); - // 2. 跳转到关于页面或其他安全页面 - // window.location.href = '/about'; + // 2. 跳转到关于页面或其他安全页面 + // window.location.href = '/about'; - // 3. 清空敏感数据 - // sessionStorage.clear(); - // localStorage.clear(); + // 3. 清空敏感数据 + // sessionStorage.clear(); + // localStorage.clear(); - // 4. 关闭窗口(慎用) - // window.close(); + // 4. 关闭窗口(慎用) + // window.close(); + + // 5. 禁用页面交互 + // document.body.innerHTML = '

请关闭开发者工具后刷新页面

'; + } } - // 定期检查 - setInterval(function() { - checkDebugger(); - // 使用debugger检测 - (function() { - const startTime = Date.now(); - debugger; - const endTime = Date.now(); - if (endTime - startTime > 100) { + // 定期检查(使用更宽松的间隔) + const checkInterval = setInterval(async function() { + // 如果已经检测到开发工具打开,停止检查 + if (isDevToolsOpened) { + clearInterval(checkInterval); + return; + } + + // 检查移动端调试工具 + if (checkMobileDevTools()) { + handleDebuggerDetected(); + return; + } + + // 检查窗口大小 + if (checkDevToolsByWidth()) { + handleDebuggerDetected(); + return; + } + + // 检查debugger(异步) + const isDebugging = await checkDevToolsByDebugger(); + if (isDebugging) { + handleDebuggerDetected(); + return; + } + + // 偶尔检查控制台(不要太频繁) + if (Math.random() < 0.1) { // 10%的概率检查 + checkDevToolsByConsole(); + } + }, 2000); // 每2秒检查一次,减少性能影响 + + // 监听窗口大小变化(添加去抖) + let resizeTimer; + window.addEventListener('resize', function() { + clearTimeout(resizeTimer); + resizeTimer = setTimeout(function() { + if (checkDevToolsByWidth() && !isDevToolsOpened) { handleDebuggerDetected(); } - })(); - }, 1000); + }, 500); + }); // 禁用控制台输出(可选,根据需求开启) // 注意:这会影响你自己的console.log调试,建议只在生产环境使用 @@ -202,22 +268,6 @@ if (process.env.NODE_ENV === 'production') { }); } - // 检测窗口大小变化(开发者工具打开时窗口大小会变化) - let lastWidth = window.innerWidth; - let lastHeight = window.innerHeight; - - window.addEventListener('resize', function() { - const currentWidth = window.innerWidth; - const currentHeight = window.innerHeight; - - if (Math.abs(currentWidth - lastWidth) > 100 || Math.abs(currentHeight - lastHeight) > 100) { - handleDebuggerDetected(); - } - - lastWidth = currentWidth; - lastHeight = currentHeight; - }); - console.log('防调试保护已启用'); } // ==================== 防 F12 和右键检查功能结束 ==================== From 88b67eb5958f19237d40796362218450b4a6125a Mon Sep 17 00:00:00 2001 From: ping <1017253325@qq.com> Date: Thu, 20 Nov 2025 14:47:37 +0800 Subject: [PATCH 3/8] update --- b/baiduc/baidu_sms_kafka_consumer.dspy | 76 ++++++++++++++++++-------- 1 file changed, 54 insertions(+), 22 deletions(-) diff --git a/b/baiduc/baidu_sms_kafka_consumer.dspy b/b/baiduc/baidu_sms_kafka_consumer.dspy index 4181447..a03b978 100644 --- a/b/baiduc/baidu_sms_kafka_consumer.dspy +++ b/b/baiduc/baidu_sms_kafka_consumer.dspy @@ -6,6 +6,7 @@ async def time_convert(resoucetime=None): return beijing_time.strftime("%Y-%m-%d %H:%M:%S") async def baidu_sms_kafka_consumer(ns={}): + import os consumer = BaiduKafKaConsumer({ # 接入点 'bootstrap.servers': '120.48.10.223:9095,180.76.96.108:9095,180.76.147.36:9095', @@ -28,15 +29,35 @@ async def baidu_sms_kafka_consumer(ns={}): # 订阅的主题名称 consumer.subscribe(['kaiyuanyun_msg_topic']) - + + files = ["baidu_kafka_msg.txt", "baidu_kafka_id.txt", "baidu_kafka_error.txt"] + for filename in files: + if not os.path.exists(filename): + with open(filename, 'w', encoding='utf-8') as f: # 'w' 模式会覆盖已有文件,但检查后使用是安全的 + pass # 创建空文件 + else: + pass + + total_count = 0 for i in range(30): + if i == 0: + # 写入文件记录轮询开始时间 时间格式: YYYY-MM-DD HH:MM:SS + with open('baidu_kafka_msg.txt', 'a', encoding='utf-8') as f: + f.write(f"轮询开始时间:{datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n") + msg = consumer.poll(0.1) # 单次轮询获取消息 if msg is None: + if i == 10: + with open('baidu_kafka_msg.txt', 'a', encoding='utf-8') as f: + f.write(f"轮询第10次消息为None,{datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n") continue elif msg.error(): - print(f"消费者错误: {msg.error()}") + # 写入日志文件记录错误信息 + with open('baidu_kafka_error.txt', 'a', encoding='utf-8') as f: + f.write(f"{datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')} - 消费者错误: {msg.error()}\n") else: + total_count += 1 try: # 解析消息内容为字典(避免变量名冲突) msg_data_ori = json.loads(msg.value().decode('utf-8')) @@ -44,14 +65,8 @@ async def baidu_sms_kafka_consumer(ns={}): messageid = msg_data.get('id') taskid = msg_data.get('taskId') - filename = 'baidu_kafka_msg.txt' - # 检查文件是否存在,不存在则创建 - if not os.path.exists(filename): - with open(filename, 'w', encoding='utf-8') as f: - print(f"文件不存在,已创建 {filename}") - # 读取文件内容进行检查 - with open(filename, 'r', encoding='utf-8') as f: + with open('baidu_kafka_id.txt', 'r', encoding='utf-8') as f: content = f.read() if messageid in content: @@ -59,9 +74,12 @@ async def baidu_sms_kafka_consumer(ns={}): continue else: # 追加写入目标内容 - with open(filename, 'a', encoding='utf-8') as f: + with open('baidu_kafka_id.txt', 'a', encoding='utf-8') as f: f.write(messageid + '\n') print(f"已写入 '{messageid}' 到文件") + + with open('baidu_kafka_msg.txt', 'a', encoding='utf-8') as f: + f.write(str(msg_data) + '\n') db = DBPools() async with db.sqlorContext('kboss') as sor: @@ -69,8 +87,9 @@ async def baidu_sms_kafka_consumer(ns={}): exist_msg = await sor.R('baidu_kafka_msg', {'messageid': messageid, 'taskid': taskid}) if exist_msg: print(f"消息id {messageid} 已存在,跳过处理") - consumer.close() - return + continue + # consumer.close() + # return # 2. 构建小写key的ns字典(完整映射所有字段) ns_msg = { @@ -119,16 +138,26 @@ async def baidu_sms_kafka_consumer(ns={}): # 查询用户手机号 account_id = msg_data.get('accountId') user_local_id_li = await sor.R('baidu_users', {'baidu_id': account_id}) - user_local_id = user_local_id_li[0]['user_id'] - user_mobile_li = await sor.R('users', {'id': user_local_id, 'del_flg': '0'}) - mobile = user_mobile_li[0]['mobile'] - - # 调用短信发送接口 - kyy_send_status = await send_vcode(mobile, sms_stype, {'content': msg_content}) - if kyy_send_status.get('status'): - await sor.U('baidu_kafka_msg', {'id': ns_msg['id'], 'kyysendstatus': '1'}) - print(f"已触发短信发送至 {mobile}") + if user_local_id_li: + user_local_id = user_local_id_li[0]['user_id'] + user_mobile_li = await sor.R('users', {'id': user_local_id, 'del_flg': '0'}) + mobile = user_mobile_li[0]['mobile'] + # 调用短信发送接口 + kyy_send_status = await send_vcode(mobile, sms_stype, {'content': msg_content}) + if kyy_send_status.get('status'): + await sor.U('baidu_kafka_msg', {'id': ns_msg['id'], 'kyysendstatus': '1'}) + else: + # 记录错误日志 短信发送失败 + with open('baidu_kafka_error.txt', 'a', encoding='utf-8') as f: + f.write(f"{datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')} - 错误: 短信发送失败至 {mobile},状态: {kyy_send_status}\n") + print(f"短信发送失败至 {mobile},状态: {kyy_send_status}") + else: + # 记录错误日志 用户未找到 + with open('baidu_kafka_error.txt', 'a', encoding='utf-8') as f: + f.write(f"{datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')} - 错误: 未找到百度用户ID {account_id} 对应的本地用户\n") + print(f"未找到百度用户ID {account_id} 对应的本地用户") + except json.JSONDecodeError: print("错误:消息内容非有效JSON") return { @@ -141,7 +170,10 @@ async def baidu_sms_kafka_consumer(ns={}): 'status': False, 'msg': f"处理异常: {str(e)}" } - + # 记录total_count + with open('baidu_kafka_msg.txt', 'a', encoding='utf-8') as f: + f.write(f"本次轮询共处理消息数:{total_count}\n") + consumer.close() # 确保消费者关闭 return { 'status': True, From d6a54bca578ee4412d8475692a47568a2fac7e55 Mon Sep 17 00:00:00 2001 From: ping <1017253325@qq.com> Date: Thu, 20 Nov 2025 15:03:47 +0800 Subject: [PATCH 4/8] update --- kgadget/src/more_task_scheduler.py | 226 +++++++++++++++++++++++++++++ 1 file changed, 226 insertions(+) create mode 100644 kgadget/src/more_task_scheduler.py diff --git a/kgadget/src/more_task_scheduler.py b/kgadget/src/more_task_scheduler.py new file mode 100644 index 0000000..42b57c9 --- /dev/null +++ b/kgadget/src/more_task_scheduler.py @@ -0,0 +1,226 @@ +#!/usr/bin/env python3 +""" +多任务定时脚本 - 带进程检测功能 +适用于 Linux crontab 部署 +""" + +import os +import sys +import time +import logging +import requests +import subprocess +from apscheduler.schedulers.blocking import BlockingScheduler +from apscheduler.executors.pool import ThreadPoolExecutor +from datetime import datetime + +# 配置日志 +logging.basicConfig( + level=logging.INFO, + format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', + handlers=[ + logging.FileHandler('/tmp/multi_task_scheduler.log'), + logging.StreamHandler(sys.stdout) + ] +) +logger = logging.getLogger(__name__) + +class ProcessChecker: + """进程检测类""" + + def __init__(self, pid_file='/tmp/multi_task_scheduler.pid'): + self.pid_file = pid_file + + def is_running(self): + """检查进程是否已经在运行""" + if not os.path.exists(self.pid_file): + return False + + try: + with open(self.pid_file, 'r') as f: + pid = int(f.read().strip()) + + # 检查PID是否存在 + try: + os.kill(pid, 0) + return True + except OSError: + os.remove(self.pid_file) + return False + + except (ValueError, IOError) as e: + logger.warning(f"读取PID文件失败: {e}") + if os.path.exists(self.pid_file): + os.remove(self.pid_file) + return False + + def create_pid_file(self): + """创建PID文件""" + try: + with open(self.pid_file, 'w') as f: + f.write(str(os.getpid())) + logger.info(f"创建PID文件: {self.pid_file}") + except IOError as e: + logger.error(f"创建PID文件失败: {e}") + + def remove_pid_file(self): + """删除PID文件""" + try: + if os.path.exists(self.pid_file): + os.remove(self.pid_file) + logger.info(f"删除PID文件: {self.pid_file}") + except IOError as e: + logger.error(f"删除PID文件失败: {e}") + +class TaskExecutor: + """任务执行器""" + + def __init__(self): + self.session = requests.Session() + self.session.headers.update({ + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' + }) + + def visit_baidu(self): + """任务1: 访问百度(每5秒)""" + start_time = time.time() + try: + response = self.session.get( + 'https://www.baidu.com/', + timeout=10, + verify=True + ) + duration = time.time() - start_time + + logger.info( + f"[百度访问] 成功 - 状态码: {response.status_code} - " + f"响应时间: {duration:.2f}秒" + ) + + return True + + except Exception as e: + logger.error(f"[百度访问] 失败 - 错误: {e}") + return False + + def execute_curl_command(self, url, task_name, log_file='/d/zhc/crontab_prod.log'): + """执行curl命令的通用方法""" + start_time = time.time() + try: + # 构建curl命令 + command = ['curl', '-s', url] + + # 执行命令 + result = subprocess.run( + command, + capture_output=True, + text=True, + timeout=300 # 5分钟超时 + ) + + duration = time.time() - start_time + + # 记录结果到日志文件 + with open(log_file, 'a', encoding='utf-8') as f: + f.write(f"\n{'='*50}\n") + f.write(f"任务: {task_name}\n") + f.write(f"执行时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n") + f.write(f"URL: {url}\n") + f.write(f"返回码: {result.returncode}\n") + f.write(f"执行时间: {duration:.2f}秒\n") + f.write(f"输出: {result.stdout}\n") + if result.stderr: + f.write(f"错误: {result.stderr}\n") + f.write(f"{'='*50}\n") + + if result.returncode == 0: + logger.info(f"[{task_name}] 成功 - 执行时间: {duration:.2f}秒") + return True + else: + logger.error(f"[{task_name}] 失败 - 返回码: {result.returncode}, 错误: {result.stderr}") + return False + + except subprocess.TimeoutExpired: + logger.error(f"[{task_name}] 超时 - 执行超过5分钟") + return False + except Exception as e: + logger.error(f"[{task_name}] 异常 - 错误: {e}") + return False + + def get_baidu_kafka_info(self): + """任务2: 访问百度kafka信息源""" + return self.execute_curl_command( + 'https://www.opencomputing.cn/baiduc/baidu_sms_kafka_consumer.dspy', + '访问百度kafka信息源' + ) + +def setup_scheduler(): + """设置和启动调度器""" + # 配置执行器 + executors = { + 'default': ThreadPoolExecutor(5) + } + + # 创建调度器 + scheduler = BlockingScheduler(executors=executors) + + # 创建任务执行器实例 + task_executor = TaskExecutor() + + # 添加任务1: 每5秒访问百度 + # scheduler.add_job( + # task_executor.visit_baidu, + # 'interval', + # seconds=5, + # id='visit_baidu_job', + # replace_existing=True + # ) + + # 添加任务2: + scheduler.add_job( + task_executor.get_baidu_kafka_info, + 'interval', + seconds=5, + id='get_baidu_kafka_info_job', + replace_existing=True + ) + return scheduler + +def main(): + """主函数""" + # 创建进程检测器 + process_checker = ProcessChecker() + + # 检查是否已有实例在运行 + if process_checker.is_running(): + logger.info("检测到脚本已在运行,退出当前实例") + sys.exit(0) + + # 创建PID文件 + process_checker.create_pid_file() + + logger.info("多任务定时脚本启动...") + logger.info(f"进程PID: {os.getpid()}") + logger.info("任务列表:") + logger.info("1. 每5秒访问百度kafka信息源") + logger.info("按 Ctrl+C 退出程序") + + scheduler = None + try: + # 设置并启动调度器 + scheduler = setup_scheduler() + scheduler.start() + + except KeyboardInterrupt: + logger.info("收到中断信号,正在关闭...") + except Exception as e: + logger.error(f"程序运行出错: {e}") + finally: + # 清理资源 + if scheduler and scheduler.running: + scheduler.shutdown() + process_checker.remove_pid_file() + logger.info("程序已退出") + +if __name__ == "__main__": + main() \ No newline at end of file From 4f3ba55d4e5bdbb96e138314ce9e8e7275d45275 Mon Sep 17 00:00:00 2001 From: ping <1017253325@qq.com> Date: Thu, 20 Nov 2025 15:05:17 +0800 Subject: [PATCH 5/8] update crontab --- crontab/crontab.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crontab/crontab.txt b/crontab/crontab.txt index a004546..e044ba0 100644 --- a/crontab/crontab.txt +++ b/crontab/crontab.txt @@ -33,4 +33,4 @@ */1 * * * * curl https://www.opencomputing.cn/account/email_info.dspy > /d/zhc/crontab_prod.log 2>&1 */1 * * * * curl https://www.opencomputing.cn/jdcloud/get_partner_order_list.dspy?page=1 > /d/zhc/crontab_prod.log 2>&1 * * * * * curl https://www.opencomputing.cn/baiduc/baidu_new_update_resouce.dspy > /d/zhc/crontab_prod.log 2>&1 -* * * * * curl https://www.opencomputing.cn/baiduc/baidu_sms_kafka_consumer.dspy > /d/zhc/crontab_dev.log 2>&1 +#* * * * * curl https://www.opencomputing.cn/baiduc/baidu_sms_kafka_consumer.dspy > /d/zhc/crontab_dev.log 2>&1 From de9e3c56e7de7af758bb64aef485dd9761e27de5 Mon Sep 17 00:00:00 2001 From: ping <1017253325@qq.com> Date: Thu, 20 Nov 2025 15:11:13 +0800 Subject: [PATCH 6/8] update crontab --- crontab/crontab.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/crontab/crontab.txt b/crontab/crontab.txt index e044ba0..975e172 100644 --- a/crontab/crontab.txt +++ b/crontab/crontab.txt @@ -34,3 +34,4 @@ */1 * * * * curl https://www.opencomputing.cn/jdcloud/get_partner_order_list.dspy?page=1 > /d/zhc/crontab_prod.log 2>&1 * * * * * curl https://www.opencomputing.cn/baiduc/baidu_new_update_resouce.dspy > /d/zhc/crontab_prod.log 2>&1 #* * * * * curl https://www.opencomputing.cn/baiduc/baidu_sms_kafka_consumer.dspy > /d/zhc/crontab_dev.log 2>&1 +*/5 * * * * /usr/bin/python3 /d/zhc/kboss_prod/kgadget/src/more_task_scheduler.py >> /tmp/multi_task_scheduler_cron.log 2>&1 From 3fa768f35a6c85aaa0268b7f3a7ae471f713731e Mon Sep 17 00:00:00 2001 From: ping <1017253325@qq.com> Date: Thu, 20 Nov 2025 15:17:11 +0800 Subject: [PATCH 7/8] update --- b/baiduc/baidu_sms_kafka_consumer.dspy | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/b/baiduc/baidu_sms_kafka_consumer.dspy b/b/baiduc/baidu_sms_kafka_consumer.dspy index a03b978..7729cbc 100644 --- a/b/baiduc/baidu_sms_kafka_consumer.dspy +++ b/b/baiduc/baidu_sms_kafka_consumer.dspy @@ -39,13 +39,13 @@ async def baidu_sms_kafka_consumer(ns={}): pass total_count = 0 - for i in range(30): + for i in range(2): if i == 0: # 写入文件记录轮询开始时间 时间格式: YYYY-MM-DD HH:MM:SS with open('baidu_kafka_msg.txt', 'a', encoding='utf-8') as f: f.write(f"轮询开始时间:{datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n") - msg = consumer.poll(0.1) # 单次轮询获取消息 + msg = consumer.poll(0.2) # 单次轮询获取消息 if msg is None: if i == 10: From 8f7f8abee8505526fc45b1017979c76d68e27062 Mon Sep 17 00:00:00 2001 From: hrx <18603305412@163.com> Date: Thu, 20 Nov 2025 15:23:28 +0800 Subject: [PATCH 8/8] updata --- f/web-kboss/src/views/product/mainPage/index.vue | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/f/web-kboss/src/views/product/mainPage/index.vue b/f/web-kboss/src/views/product/mainPage/index.vue index 693e5a5..6258254 100644 --- a/f/web-kboss/src/views/product/mainPage/index.vue +++ b/f/web-kboss/src/views/product/mainPage/index.vue @@ -130,7 +130,7 @@ export default Vue.extend({ viewList: [], navList: [], // 移除 data 中的 mybalance 定义 - // mybalance: 0, // ❌ 删除这一行 + mybalance: 0, todoList: [ { name: '待支付', count: 0 }, { name: '待续费', count: 0 }, @@ -144,7 +144,7 @@ export default Vue.extend({ }, created() { // 移除 initMybalance 调用,因为现在使用 computed 的 mybalance - // this.initMybalance(); // ❌ 删除这一行 + this.initMybalance(); // ❌ 删除这一行 this.getUnreadMsgCount(); this.fetchTodoCount(); }, @@ -188,12 +188,12 @@ export default Vue.extend({ return this.navIcons[iconIndex]; }, // 移除 initMybalance 方法,因为现在使用 computed 的 mybalance - // async initMybalance() { // ❌ 删除这个方法 - // const res = await editReachargelogAPI() - // if (res.status) { - // this.mybalance = res.data - // } - // }, + async initMybalance() { // ❌ 删除这个方法 + const res = await editReachargelogAPI() + if (res.status) { + this.mybalance = res.data + } + }, async getUnreadMsgCount() { try { const res = await getUnreadmsgAPI();