人员安全智能管理看板系统 · 运维
Overview
监控桌面「项目安全资料」中的体检报告 PDF、违章台账、特种作业台账、班前教育签到、人脸考勤 5 类数据源;任一文件新增/修改/删除 → 2 秒内自动重跑管线 → 看板与智能表格更新 → 企微推送(与定时播报同模板)→ 公网 1~2 分钟内自动同步。本 skill 提供这套系统的全部日常运维操作与故障排查方法。
核心前提:代码、脚本、路径全部固化在 references/paths.md(含 python 解释器、目录、端口、公网地址、webhook 位置)。执行任何命令前先读取该文件确认路径仍有效(用户目录变化时需更新)。
快速状态总览(第一步都先跑这个)
"<PY>" "<SKILL>/scripts/status.py"
输出:监控服务端口/进程、保活进程、数据版本与人数、推送开关状态、数据源文件数、公网是否同步。任何"没反应/异常"类问题,先跑它定位是哪个环节断了。
Workflow Decision Tree
用户报障(没推送 / 看板没更新 / 想手动操作)
│
├─ 跑 status.py → 看哪一环断了
│
├─ 8766 无监听(监控服务死了)
│ ├─ 查 pythonw(keep_alive) 是否在跑:在 → 等 ≤60s 自动复活;不在 → 见「重启监控服务」
│ └─ 复活后服务会自动重跑管线 + 补公网同步 + 推送(受推送开关约束)
│
├─ 推送没到(但服务正常)
│ ├─ 推送开关状态?→ --push-off 过则 ⏸,需 --push-on
│ ├─ webhook 配置?→ config.py WECOM_WEBHOOK / 环境变量
│ └─ 查 push_log/*.jsonl 最近记录(send_ok / 错误码)
│
├─ 看板页面旧数据
│ ├─ 本地页 → 10 秒轮询 version 自动热更新;检查 HTTP JSON 是否新(curl 127.0.0.1:8766)
│ └─ 公网页 → 自动同步约 1~2 分钟;超时未更 → 手动跑 deploy_sync.py(前提:WorkBuddy 桌面端开着)
│
└─ 数据没进表(新放 PDF 不在人员列表)
├─ 文件名/格式是否符合解析器(对照现有 PDF 版式)
├─ 单独解析该 PDF 看是否报错:PY -c "import parse_health; ..."
└─ 防抖窗口(约几秒)内多次变化会合并,稍等再查
Task 1:一键状态检查
scripts/status.py,见上。关键指标:8766 LISTENING、pythonw keep_alive、推送模式、version、人数、体检 PDF 份数、公网 version 一致性。
Task 2:手动运行一次管线(重新生成看板 + 智能表格)
cd "<SYS>" && "<PY>" run.py
产出:output/人员安全智能管理看板.html、output/人员管理智能表格.json、output/人员管理智能表格.xlsx;并自动同步 deploy/ 目录。注意:本操作不推送、不同步公网(那是监控服务的职责)。数据无变化时内容与线上一致。
Task 3:手动企微推送一次
两种方式:
- 推送最新 JSON 快照(快,不重跑管线):
"<PY>" -c "import json,wecom_push as w; r=json.load(open(r'<OUT>/人员管理智能表格.json',encoding='utf-8')); print('推送:', w.notify_schedule(r))"
- 先重跑再推送(保证最新):cd "<SYS>" && "<PY>" wecom_push.py --send-schedule
内容与定时播报同模板(KPI + 高危名单 + 证书提醒 + 公网链接)。推送开关关闭时会跳过(打印 ⏸)。
Task 4:暂停 / 恢复推送(持久开关)
cd "<SYS>" && "<PY>" wecom_push.py --push-off # 暂停
cd "<SYS>" && "<PY>" wecom_push.py --push-on # 恢复
cd "<SYS>" && "<PY>" wecom_push.py --push-status # 查看状态
开关持久化在 safety_system/.push_mode.json,跨服务重启/电脑重启记忆,不会自动恢复。暂停只影响企微消息,看板/监控/公网同步照常。
Task 5:重启监控服务(加载新代码)
监控服务由 keep_alive.py(pythonw 常驻,每 60 秒检查 8766)保活。正确重启方式 = 杀掉当前 auto_watch 进程,等 ≤60s 自动拉起(会自动用最新代码重跑管线):
netstat -ano | grep ':8766.*LISTENING'拿 PID- 杀进程(PowerShell
Stop-Process -Id <PID> -Force) - 等 60~80 秒,确认新 PID 监听 +
watchdog.log出现启动日志
若 keep_alive 本身没在跑:直接 PowerShell Start-Process pythonw 运行 <SYS>/keep_alive.py(隐藏窗口);开机自启入口在启动文件夹的「安全看板保活.vbs」。不要用 Bash 后台 & 或 run_in_background 拉服务——会随会话回收退出(本项目反复踩过的坑)。
Task 6:公网同步(手动触发)
cd "<SYS>" && "<PY>" deploy_sync.py
自动比对本地/公网 JSON version,不一致才部署。依赖 WorkBuddy 桌面端运行的 connector-proxy(MCP 地址+令牌从 ~/.workbuddy/logs 自动发现);桌面端关闭时脚本自动跳过(打印原因,本地不受影响)。
Task 7:数据增删的预期行为(向用户说明用)
- 新增体检报告 PDF → ≤2s 检测 → 重跑 → 人数 +1 → 立即推送(含新增人员)→ 公网 1~2min 跟进
- 删除 PDF → 指纹消失判定「删除」→ 人数 -1 → 推送「人员移除」
- 修改台账 → 同上链路重跑推送(无人员变化时推送内容与定时播报一致,仅标题为「数据更新即时播报」)
- 服务停机期间的变化:重启时首次同步自动补齐
References
references/paths.md— 全部路径/端口/地址/webhook/阈值等环境常量references/architecture.md— 系统架构、推送模板与开关、公网同步原理、热更新机制references/troubleshooting.md— 历史踩坑记录与排查要点(GBK 崩溃、端口占用、touch 空文件、WebFetch 缓存、会话级进程回收等)
注意
- 所有命令中的
<PY>/<SYS>/<OUT>请替换为references/paths.md中的实际值。 - 涉及用户桌面「项目安全资料」文件的删除/清理必须先与用户确认;测试用 PDF 生成后用完即删。
- 公网链接是静态资源入口,管理入口在 WorkBuddy「设置-数据管理-我发布的应用」。