记录一次任务自启的排雷与验收(2026-08-31)
记录一次任务自启的排雷与验收(2026-08-31)
“任务配好了(Ready/AtLogOn),但从没真正触发过(LastRunTime=1999),当前跑的是一份静默手动实例。”
这天从后半夜一直干到凌晨,原本只想顺手确认一下 HLDeFiWatchdog 的开机自启配置,结果排掉了三个假象,又真刀真枪把 AtLogOn 路径验收了一遍。
一、发现问题:纸面自启与真实状态的裂缝
凌晨检查任务 HLDeFiWatchdog,State=Ready,触发条件 AtLogOn,动作是启动 watchdog.py --loop,看着配置完全正常。但 LastRunTime 显示 1999,意思是这个任务从未真正触发过。当前系统里跑的 PID 21812 是上次恢复时手动拉起的实例,跟“开机自启”这条路没有任何关系。
关键判断:配置正确不等于验收通过。 这个自启任务从配好那天起一次都没跑过,所谓的“开机自启”只是纸面。要补的,就是真正用任务计划程序触发一次,验证它能不能拉起会写日志的 watchdog。
二、排除一个“致命点”:WorkingDirectory 不是根因
补验收前先排查一个可能让重启后全部子进程拉起失败的点。任务计划程序里 WorkingDirectory 为空,如果登录时 cwd 落到 System32,watchdog 里 cmd /c maincoin_paper.py 这种相对路径就会全部失败。
翻 watchdog.py,发现它拉子进程用的是 start_detached.py --cwd "{DASHBOARD_DIR}" 加绝对路径,所以子进程不依赖任务的 WorkingDirectory。自愈启动的致命点其实不存在。 但当前 21812 这份手动实例不写日志,还是很反常。
三、日志停摆:静默孤儿 21812 的不可观测
查 21812 的 cwd,确实是 defi_dashboard,没问题。但 watchdog.log 尾行停在 15:57,mtime 却是现在。一开始以为读到并发中间态,修正后重读,真相是:watchdog.log 最后写入停在 16:03 UTC,之后再无写入。 当前 21812(22:26 手动起的孤儿)活着但不写日志,因为它是上次恢复时用 subprocess 拉起的,stdout 管道随父进程消亡被丢弃,巡检完全不可观测。
也就是说,旧 watchdog 在 16:03 就崩了没再起来;现在跑的是一个“活着的哑巴”。
四、补验收:杀孤儿、走计划任务路径、实测通过
补验收分三步:先杀 21812,再用 Task Scheduler 触发,最后核验。
PowerShell 第一次语法笔误($_..CommandLine),命令没执行。改用 Bash taskkill 杀掉 21812,再用 PowerShell 触发任务。任务触发成功:LastRunTime=00:06,Result=267009 即 SCHED_S_TASK_RUNNING。
等几秒让新 watchdog 拉起子进程写日志。核验结果:
- 新 watchdog PID 7400,00:06:18 由任务计划程序拉起,单实例 ✅
- watchdog.log 恢复写入——16:06:18 UTC 完整巡检:trader✅ signal✅ mc_paper✅ oos✅ factor_monitor✅,仅 sim_loop🔴(预期的搁置项)
- 子进程全活:trader/signal 各 1,oos/mc_paper/factor_monitor 各 1 真实实例;之前扫描里显示的“2”是
cmd /c外壳加 python 子进程,已用父进程命令行证伪为误报。
“开机自启”正式验收通过。 任务计划程序 AtLogOn 触发路径已实测可拉起会写日志的 watchdog,真实重启登录时会走同一条路径。
五、并行工作与遗留
验收前后还做了几件并行核验:
- 交易栈全活:smart_money_trader PID 20620、smart_money_signal PID 23792 都活着;watchdog 新 PID 7400;mc_paper/factor_monitor/oos 各 1 真实实例。
- HL 只读对账 dry-run:无 ghost 仓位;4 个 orphan(SOL/BTC/ETH/AAVE,归 hl_testnet.db 视角)仅告警;smart_money 4 OPEN,testnet 0 OPEN。
- 链上-DB 漂移检查:chain=909.5761,db_total=902.2617,drift=0.80%,低于 5% 阈值,通过。
- factor_ic OOS tracker 多轮扫描结果完全一致:Gate1 样本 28 通过,Gate2 p=0.8506、Gate3 Sharpe -3.042、Gate4 maxDD 320.9%,regime 回落率 37.5% < 50%,触发 HALT,信号源失效。
遗留:sim_loop 仍是 🔴 的预期搁置项;factor_ic 的 HALT 状态等 factor_ic_oos_apply.py --confirm 处理;对账时发现的 smart_money 残差 −$21.15 需进一步复核是否属小额账面漂移,虽然后续漂移检查已确认 drift 正常,但那次残差来源还没闭环。