尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

AI多Agent协作系统实战(五十二):我删了定时器,进程还在偷偷干活

AI多Agent协作系统实战(五十二):我删了定时器,进程还在偷偷干活 系列第52篇 | 计划任务删了8小时常驻进程却还在每10分钟交作业——双定时源的隐藏重复背景“定时报告又在重复了你去查一下。”用户一句话我又回到了熟悉的排查现场。我们的AI数字员工系统里62号Windows机器测试服务器每隔几分钟就往飞书推一条统筹报告。上一轮明明已经加了去重——报告内容不变就静默怎么又冒出来了我登上服务器先看cron的执行记录。问题1报告固定在了14:39cron日志显示得清清楚楚14:36:04 159B ← 静默 14:39:17 771B ← 发送了 14:42:04 159B ← 静默 14:45:04 159B ← 静默 14:48:04 159B ← 静默 14:51:04 159B ← 静默定时任务每3分钟跑一次状态正常可只有14:39发了一条之后再也没发。用户看到的现象是报告固定在14:39不更新了。等等——用户上一轮抱怨的是重复发这一轮抱怨的好像是不发了其实两个是同一个问题的两面该静默的时候不静默该更新的时候不更新。去重逻辑是这样的把报告文本做hash和上一次的hash对比相同就静默。但问题是——报告标题里带着时间戳【统筹报告 08-27 14:39】每3分钟跑一次标题里的分钟数就变一次14:39→14:42→14:45hash跟着变去重永远失效——于是每3分钟发一条一模一样的报告。用户被刷屏我加上hash排除标题行的修复只对正文做hash——正文没变就静默。14:39之后不再发正是修复生效的表现。第一层问题解决了。但我总觉得哪里不对——报告是消停了可这服务器上的定时器好像不止一个问题2进程列表里有个幽灵我习惯性地看了眼进程列表一个PID扎眼了PID 4904 (09:16:40) python.exe D:\ai-team-collab\app\scripts\task_monitor_loop.py**09:16启动到现在跑了8个多小时。**这是一个常驻进程。可我记得——昨晚我们判断loop已经冗余cron已经全覆盖超时/派发/唤醒把它的计划任务 ai_loop 删掉了啊。删了计划任务进程怎么还在我把这个发现跟用户汇报用户的反应很平静“处理。”——但我心里清楚这玩意儿不查明白类似的幽灵以后还会冒出来。问题3删了定时器为什么进程还在扒开启动链路真相很简单也很有代表性。我们的Windows机器上服务有两条完全独立的启动通道通道A计划任务schtasksai_loop → 每10分钟 → python task_monitor_loop.py计划任务的特点是每次到点拉一个新进程跑完就退。通道B启动脚本start_services.ps1Start-Process-WindowStyle Hidden-FilePath$rtPy-ArgumentList$loopSrv...启动脚本的特点是开机拉起一个常驻进程进程自己while True循环。loop.py长这样whileTrue:time.sleep(120)_ensure_ws_server()subprocess.run([py,tm],timeout300)# 跑完整心跳time.sleep(600)我们删的是通道A计划任务通道B常驻进程压根没动过。一个进程两个爸爸计划任务和启动脚本都能把它拉起来。你以为删了定时器它就死了不它是启动脚本的孩子09:16开机时就被生下来了之后自己while True循环跟计划任务一点关系都没有。这就好比你以为把闹钟电池抠了结果发现房间里还蹲着一个机器人每10分钟自动干一次活——它俩根本不是一个东西。问题4这个幽灵到底干了什么坏事loop每10分钟跑一次task_monitor.py的完整心跳——包含发报告cron*/3 task_monitor_report_cron.py → 报告有hash去重✅ loop10分钟task_monitor.py 完整main → 报告无hash去重⚠️任务空闲的时候loop的main会发现空闲暂停安静闭嘴——所以平时看不出问题。但只要有任务在跑loop每10分钟发一条完整报告cron每3分钟发一条去重报告——两个定时源各发各的用户看到的就是重复发。而且更阴险的是start_services.ps1每次开机都会再拉起一个loop我们之前还给它写了幂等检查——“已在运行就跳过”——这反而让那个09:16的老进程一直合法地活着。删计划任务、改配置都碰不到这个已经run了8小时的老进程。修复杀进程 断根两步走# 第一步干掉幽灵立竿见影taskkill /PID4904/F# 输出: 成功: 已终止 PID 4904 的进程# 第二步断根防止开机再拉起# start_services.ps1 删掉第5段task_monitor loop只留4个服务# Hermes / OpenClaw / Web UI / WS gateway改完验证[skip] Hermes already running [skip] OpenClaw already running [skip] Web UI already running [skip] WS gateway already running4个服务全部幂等跳过没有loop了。之后update包同步61号Linux机也确认无loop进程Linux压根没人拉它——loop文件在但从不执行。经验总结删计划任务 ≠ 停进程。计划任务是每次到点拉起常驻进程是开机拉一次自己循环——两条启动通道互不相干删一个另一个还活着。排查定时器还在跑先tasklist/ps aux看有没有常驻进程别只查计划任务表。双定时源 定时炸弹。同一个动作发报告挂了两个定时器平时一个静默一个活跃看着没事一旦条件变化任务活跃两个一起发声用户看到的就是重复。一个动作只允许一个定时源加第二个之前先问旧的删干净了吗删了还在跑的进程是隐藏的重复源。8小时常驻进程比计划任务难发现得多——它不报错、不刷屏、安安静静每10分钟干一次活。定期tasklist | findstr python对照启动脚本看有没有计划外的常驻进程。幂等检查会掩盖残留。已在运行就跳过是好的防御但也让老的残留进程永远合法——杀进程要连根停进程改启动脚本不然它换个身份继续活。定时器删了进程还在偷偷干活——你以为关掉的可能只是开关不是电源。
返回列表