网信办两套食安:现场运维总记录
更新日期:2026-10-23。适用于本次迁移后的麒麟新服务器。本文记录的是本会话已核实的配置、实际操作结果和待办,不是可以从头重复执行的安装脚本。后续运维先读本文,再核对现场当前状态。
软件安装位置、两套单独启停、共享服务和工具命令集中在 软件与运维命令速查。
1. 当前结论与暂停边界
两套食安应用和达梦数据库均已部署,用户已现场确认学校端登录、历史晨检图片、留样记录及可用照片、两套各两台AI盒子的新上报/抓拍图片/视频正常;大屏四路与轮播直接打开及刷新均通过。监管端与手机扫码入口明确暂缓,不能因HTTP 200就宣称业务验收通过。
当前系统已接收真实新数据。不得重新导入原迁移包、清空模式、恢复旧数据库覆盖新业务,或直接切回旧机丢弃新增数据。
**用户明确安排:等两套前厅都迁移完成后,再安排停止/重启及恢复演练。现在不要执行pm2 kill、pm2 restart all、systemctl restart pm2-foodsafe或整机重启。**故障所需的单套定向重启也须先说明影响并确认当时窗口。
充值系统故障排查已取消;不要继续修改其Nginx、证书、服务或数据。现场在线源码打包手册仍暂停,本次采用离线dist制品。两套前厅部署及联动属于后续工作,不能标记完成。
2. 服务器和软件实况
| 项目 | 已确认值 |
|---|---|
| 新服务器 | 10.10.235.2 |
| 旧服务器 | 10.10.235.1;最终要停用,当前未确认所有旧服务退出 |
| 客户管理电脑 | Huawei用户,银河麒麟桌面V10;常用中转目录 /home/Huawei/桌面/tmp |
| 新机操作系统 | Kylin Linux Advanced Server V10 (Halberd),x86_64,glibc 2.28 |
| 存储 | /data约1.8TB,用于应用和本次业务表空间;/workspace约7.3TB,用于迁移包、备份等。容量以实时df为准 |
| 内存 | 约250GiB |
| 时间 | Asia/Shanghai,用户回传system clock synchronized=yes;RTC local TZ提示仍在,未修改RTC |
| Node/pnpm/PM2 | Node20.19.5、pnpm10.21.0、PM2 6.0.13;nvm0.40.3 |
| 应用OS用户 | foodsafe,home /var/lib/foodsafe |
| 稳定程序路径 | /opt/foodsafe-node/bin/node、pnpm、pm2 |
| Python | /usr/bin/python3,3.7.9 |
| Nginx | 1.21.5,/usr/sbin/nginx,服务nginx,工作用户nginx;主配置 /etc/nginx/nginx.conf 加载 /etc/nginx/conf.d/*.conf |
| 安全状态 | SELinux Disabled;firewalld active,public区域,网卡p8p1。没有关闭防火墙 |
新机DNS最初为空,曾导致dnf无法解析仓库,后已能安装软件。不要遇到错误就再次覆盖DNS或网卡配置。此前磁盘dd结果为同步小块写入测试,不能当成全面读写性能证明;本次实际路径以本文为准。
3. 两套实例对应表
| 项目 | 第一套 | 第二套 |
|---|---|---|
| 单位/食堂标识 | 车公庄办公区 | 阜成路办公区 |
| 应用根目录 | /data/apps/foodsafe1 |
/data/apps/foodsafe2 |
| PM2进程名 | foodsafe-1 | foodsafe-2 |
| 学校端及HTTP设备入口 | http://10.10.235.2:4201 |
http://10.10.235.2:4202 |
| 监管端 | 4301 | 4302 |
| 大屏 | 5209 | 5210 |
| 移动/扫码端 | 4211 | 4212 |
| 后端内部端口 | 127.0.0.1:3300 | 127.0.0.1:3301 |
| 达梦业务用户/模式 | FOODSAFE_APP | FOODSAFE2_APP |
| 达梦表空间 | FOODSAFE_TBS | FOODSAFE2_TBS |
| 临时探测用户 | FOODSAFE1_PROBE | FOODSAFE2_PROBE |
| 新表空间文件目录 | /data/dmdata/foodsafe |
/data/dmdata/foodsafe2 |
| 前厅联动规划 | 新机8080,待前厅部署验证 | 新机8081,待前厅部署验证 |
| 留样秤序列号 | DWDEV202401090793 | DWDEV202401090855 |
两库内部school_id=1、canteen_id=1属于各自独立模式,不是跨套通用的记录ID。两套食堂原INSTRUMENT都是ZLYG2201001,现场保留;留样记录的INSTRUMENT则按唯一设备序列号补齐,不混用柜号、数据库ID和设备序列号。
两套应用都以foodsafe用户运行,共用PM2 daemon,但数据目录、.env、端口、数据库账号分别独立。不要把第一套.env整体复制给第二套。MQTT Broker为新机共享1883服务,不属于任一套私有进程。
4. 常用路径与配置
两套路径中的数字1/2必须与操作对象一致。
| 用途 | 路径 |
|---|---|
| 应用私有配置 | /data/apps/foodsafe1/services/gateway-service/.env;第二套替换foodsafe2 |
| PM2进程配置 | /data/apps/foodsafe1/deploy/ecosystem.config.cjs;第二套同结构 |
| 生成的Nginx配置 | /data/apps/foodsafe1/deploy/nginx.conf;第二套同结构 |
| 正式Nginx站点 | /etc/nginx/conf.d/foodsafe-release-1.conf、foodsafe-release-2.conf |
| 普通上传图片 | /data/apps/foodsafe1/data/uploads、/data/apps/foodsafe2/data/uploads |
| AI盒子文件 | /data/apps/foodsafe1/aiboxfile、/data/apps/foodsafe2/aiboxfile |
| 应用日志 | 两套各自APP_ROOT/logs;已确认第一套out-0.log/error-0.log,第二套out-1.log/error-1.log |
| 旧文件暂存 | /data/migration/foodsafe1、/data/migration/foodsafe2 |
| 旧配置与定向修复备份 | 两套各自 /data/migration/foodsafeN/private-config,root私有权限 |
| PM2目录 | /var/lib/foodsafe/.pm2,保存列表dump.pm2 |
| 应用制品目录 | /workspace/foodsafe-packages/foodsafe-standard-wxb-c4070071-kylin-x64 |
| 两套部署参数 | 上述制品目录config/deploy.env和config/deploy2.env |
| 数据迁移包目录 | /workspace/foodsafe-db-migration |
.env是dotenv配置,不是Shell脚本,不使用source执行。新应用入口从APP_ROOT/services/gateway-service/.env加载;进程环境变量优先,遇到不一致应一起核对。不要输出JWT、数据库密码、MQTT密码、OSS密钥或复制浏览器Authorization。
已配置DB_KIND=dm、各自DM_USER、127.0.0.1:5236;DB_AUTO_MIGRATE=0、DB_SYNC_COMMENTS=0、DEMO_SEED=false。两套JWT分别生成,不显示明文。OSS_SWITCH=false、BRIGHT_KITCHEN_MODE=2。DEMO_AI_JOB_ENABLED保持0;AIBOX_SCHEDULER_ENABLED、DEWO_CALLBACK_SUBSCRIBE_ENABLED、YLT_TOKEN_REFRESH_ENABLED在迁移阶段置0,是否恢复要按实际功能验证,不能为了“功能正常”全部开启。
AI录像片段定时缓存开关不控制违规记录HTTP接收。设备MQTT、密钥及盒子信息部分由数据库读取,不能因为.env缺少旧项就全部补上;MQTT设备配置有效时优先使用设备记录,环境变量还存在备用连接路径。旧ylt外部域名、MEGO localhost4003是否仍使用尚未核定,未盲目照搬或改成新机IP。
5. 达梦实况与迁移验收
厂家已安装DM,不重装。程序 /home/dmdba/dmdbms/bin,OS用户dmdba:dinstall,服务DmServiceDMS,数据库DAMENG、实例DMSERVER、5236端口。DM8.4企业版,完整ID_CODE为 --03134284488-20260902-347071-20200 Pack30;COMPATIBLE_MODE=4,大小写不敏感(case0),UTF8(unicode1),PAGE=32768,LENGTH_IN_CHAR=0。生成SQL使用适当字符长度单位,不修改实例参数。
| 迁移验收 | 第一套 | 第二套 |
|---|---|---|
| 目标表 | 119 | 119 |
| 导入记录数 | 985311 | 1442521 |
| 列 | 1392 | 1392 |
| 自增克隆测试 | 94通过 | 94通过 |
| 结构/权限核验 | 11562通过,0失败,0未核实 | 同左 |
| 全字段对账 | 零差异 | 零差异 |
这是迁移验收时点,后续地址修复、设备归属补齐、登录和真实上报会改变业务库,不能再次把当前库与原备份相同当作运行要求。
第一套现场probe目录probe-1792634672918,结构最终报告private/metadata-result-20261022-112241.json;最初FS1_PROBE默认测试表不适用现场,已在private/import.private.json绑定isolationProbeTable=FOODSAFE1_PROBE.Z_CAP_VALUES后验收通过。第二套probe-1792733904337,结构报告private/metadata-result.json;两套各自private/values-result.json保存数据验收。
第二套早期有损中文候选已撤回;只能使用最终交付顶层包,禁止使用“已撤回候选-禁止使用”。最终包SQL/LOB谱系及独立Unicode核验见第二套summary;不把同一有损导出两端相等当作源保真证明。
迁移工具会拒绝非空模式、错误实例/包/证据。正式运行后不要重跑prepare、provision、probe或import。遇到DDL部分成功必须读回现状,不删库重来。Disql交互长路径曾截断,生成配置后进入private目录使用短文件名;/nolog必须先login,不能直接查询未连接的客户端。
6. 制品和私有资产索引
本机统一交付根:/Users/wiscourper/Downloads/work/团餐项目/食安/中央网信办后期维护/中央网信办迁移1021。客户备份、SQL/LOB及密码文件只存私有目录,不上传公开网站或提交Git。
| 文件/资产 | 冻结标识 |
|---|---|
| 应用原制品 | foodsafe-standard-wxb-c4070071-kylin-x64.tar.gz,standard_wxb@c40700715f8c23eb33eb855beec44b28dd19ec5b |
| 第一套原MySQL备份 | mysql8_foodsafe_20261021-1356.sql.gz,SHA256 205fd3828500f2f1167534c480e00b9a77063a7d2c0d62a78db22b5573252e2b |
| 第二套原MySQL备份 | mysql8_foodsafe2_20261022-0310.sql.gz,SHA256 fa3a82a129a8366535c3303c3eb92eda097b4f7685e77a2adf5fc83a4b188d3a |
| 第一套最终DM包 | foodsafe1-dm-c4070071-20261021.tar.gz,SHA256 4acad56d4c1a9025a1698478982fe63f784878d333f0d87f49345599f6d63a93 |
| 第二套最终DM包 | foodsafe2-dm-c4070071-20261023.tar.gz,SHA256 631913001cb3900939d0caa71873c038d1ed48408e98b0098f9fa2c44bb270a6 |
| 晨检补丁 | 离线打包物/晨检图片修复/foodsafe-morning-images-c4070071-fix.tar.gz,SHA256 524b301d03fc3c5bb2f0c608d851d06afa27c37207b7ec3d139ad615ca500ae8 |
| 晨检修复源码 | 本地standard_wxb已存在提交e77e5d82;原c407完整包未自动改写,复用旧完整包时仍需配补丁 |
| 清理R2交付 | 运维清理/foodsafe-cleanup-7days-20261023-r2.tar.gz;以同名SHA文件及项目delivery.json核对 |
两套DM交付各在“食安第一套数据库/达梦迁移交付包”和“食安第二套数据库/达梦迁移交付包”。晨检修复仅替换一个编译模块,不等于重新发布完整前后端制品。未来重打包应包含源码修复,仍冻结和记录实际部署版本,不能覆盖客户.env与文件目录。
7. 本次故障和修复台账
7.1 晨检历史图片404:已解决
旧机正常图片使用Base64;新代码优先选历史OSS网址,在OSS=false时截掉域名生成不存在的/food-safety路径。现场记录8105同时有远程网址及人脸/手心/手背Base64,文件系统不存在同名JPG,因此不是普通文件漏迁。
修复仅在晨检返回逻辑:本地模式+历史远程URL时优先可识别的Base64;无有效内嵌图则保留完整远程地址,不把远程路径冒充本地文件;原本地路径和OSS开启行为保留。相关9套38项测试通过,生产模块编译差异限定;客户确认两套图片正常。
两套旧模块备份:第一套 /data/apps/foodsafe1/.patch-backups/morning-images-20261023-120654-380456/morning-check.service.js;第二套 /data/apps/foodsafe2/.patch-backups/morning-images-20261023-141441-714104/morning-check.service.js。补丁初版末尾硬编码“重启foodsafe-1”提示已在现场纠正,第二套不能照着重启第一套。
7.2 历史留样不显示:已解决
新查询会校验设备归属,旧记录INSTRUMENT为空而被过滤。用户明确确认第一套8747条、第二套40条各自来自唯一留样秤,均未换设备。先核设备/学校/食堂、保存原记录备份,再事务内定向补序列号;不关闭跨校隔离校验,不改变两套食堂ZLYG2201001。页面已确认恢复。
| 记录 | 私有备份路径(不公开内容) |
|---|---|
| 第一套设备MQTT地址修改 | /data/migration/foodsafe1/private-config/mqtt-device-1-1792662400832.json |
| 第一套8747条留样原记录 | /data/migration/foodsafe1/private-config/sampling-before-fix-1792742861679.json |
| 第二套设备及40条留样原记录 | /data/migration/foodsafe2/private-config/sampling-before-fix-1792739204349.json |
7.3 留样照片仍请求旧IP:已解决,保留例外
文件已迁、访问新机/api/files/view返回200,但数据库IMAGE_URL仍含旧机绝对地址。先逐张检查本地文件存在,再按清单备份并事务修改:第一套8745条从旧机4201改新机4201;第二套38条从旧机4202改新机4202。用户确认页面图片恢复。
第一套清单和原值:/data/migration/foodsafe1/private-config/sampling-image-plan-1792743461023.json。第二套原值:/data/migration/foodsafe2/private-config/sampling-images-before-fix-1792740730622.json。
**两套各ID1、2的历史留样照片缺失,用户明确接受不处理,原值保留。**不能标成“全部历史图片无缺失”。用户清理过两套旧aiboxfile;按清理后现存内容迁移,第一套约3MB、第二套约1.5MB。第二套比较时旧机新增3个txt,用户明确以已复制版本为准,没有补迁;不把这些被清理或放弃的旧图纳入新上传故障。
7.4 AI盒子上报不到新机:已解决
第一套盒子原指新机3300,但后端只监听本机;改成第一套基础服务地址http://10.10.235.2:4201。第二套使用4202。HTTP接口由Nginx转发,违规记录接口为POST /openApi/checkRecord/reportCheckRecords;基础地址栏不能重复追加接口。两套各两台盒子均已确认切换后的新违规记录、抓拍显示/放大和实时视频正常。大屏四路/轮播直接打开与F5刷新全部通过。
7.5 MQTT版本与账号:服务完成,设备网络待验
旧机Mosquitto2.0.18在/usr/local/sbin,不属于RPM;新机dnf安装为1.6.15,未将它直接用于承接。旧2.0.18二进制复制至 /opt/foodsafe-mosquitto/2.0.18/sbin/mosquitto,同架构/glibc及依赖检查通过。服务mosquitto用drop-in /etc/systemd/system/mosquitto.service.d/foodsafe-migration.conf,Type=simple,User/Group=mosquitto,ExecStart指独立2.0.18;未替换系统/usr/sbin版本。
新配置/etc/mosquitto/mosquitto.conf:1883监听、allow_anonymous false、password_file /etc/mosquitto/passwd、persistence true、persistence_location /var/lib/mosquitto、log_dest stdout。账号文件沿用旧机,属主警告后修正为mosquitto:mosquitto/0600,禁止用mosquitto_passwd -c覆盖共享账号文件。旧配置备份 /data/migration/foodsafe1/mqtt-new/backup-20261022-172824。
第一套原账号本机随机非保留主题收发通过;第二套原账号连接认证通过。服务active/enabled。新机1883防火墙尚未确认放行;设备侧连接/Topic收发仍待办,不能用本机测试替代。旧Broker仍未确认停止,旧mosquitto.db约777字节的会话/保留消息是否迁移尚未收尾。
8. 日常只读检查命令
以下在新服务器root终端执行,除明确标注外只查询。不在客户电脑的Huawei终端或SQL>中直接运行。
检查两套进程(始终使用foodsafe用户及其PM2_HOME,不用root另启一套PM2):
runuser -u foodsafe -- env HOME=/var/lib/foodsafe PM2_HOME=/var/lib/foodsafe/.pm2 PATH=/opt/foodsafe-node/bin:/usr/bin:/bin /opt/foodsafe-node/bin/pm2 list
检查两套HTTP及接口连通。HTTP200只代表可达,仍要看业务响应与实际记录:
for PORT in 4201 4202; do
curl --noproxy '*' -sS --connect-timeout 3 --max-time 10 -o /dev/null \
-w "学校端 $PORT 后端健康:HTTP %{http_code}\n" \
"http://127.0.0.1:$PORT/api/health"
done
检查服务运行与启用状态:
for SERVICE in nginx mosquitto pm2-foodsafe DmServiceDMS; do
echo "===== $SERVICE ====="
systemctl show "$SERVICE" --no-pager -p LoadState -p ActiveState -p UnitFileState -p MainPID
done
检查空间和应用文件占用:
df -h /data /workspace
df -i /data /workspace
du -sh /data/apps/foodsafe1/aiboxfile /data/apps/foodsafe2/aiboxfile /data/apps/foodsafe1/logs /data/apps/foodsafe2/logs
查看单套错误日志或服务日志(可能含业务信息,发给他人前脱敏):
tail -n 80 /data/apps/foodsafe1/logs/error-0.log
tail -n 80 /data/apps/foodsafe2/logs/error-1.log
journalctl -u mosquitto -n 40 --no-pager
检查Nginx与网络,不自动改配置:
nginx -t
ss -lntp | grep -E ':(1883|3300|3301|4201|4202|4301|4302|5209|5210|4211|4212|5236)[[:space:]]'
firewall-cmd --get-active-zones
firewall-cmd --zone=public --list-ports
最后确认开放的食安前端口为4201、4301、5209、4211、4202、4302、5210、4212,runtime与permanent均配置。9100、9835、22等原有规则保留。不得为方便直接关闭防火墙或将3300/3301对外监听。
9. 7天清理任务:已配置,待首轮运行验证
用户明确选择AI抓拍图片/视频保留7天、日志归档保留7天,使用crontab。旧脚本不是保留7天:旧root cron每分钟清空食安日志、每周六00:00清空aiboxfile;不得在新机照搬。
正式脚本 /usr/local/lib/foodsafe-maintenance/cleanup.py 与同目录foodsafe-logrotate.conf,root:root/0644。R2脚本SHA256 8bfb07b973b9d2ee98661329816337b8d6ad499340d1a502e63812390ec9fa9c。旧脚本备份cleanup.py.bak.20261023-175326-454703。
R1安装前预览因压缩包保留Mac属主,被麒麟logrotate忽略且退出0,不能算通过。正式安装配置root属主正确;随后现场脚本更新R2,增加属主和错误文本门禁,预览已通过:一个规则组覆盖四个PM2日志文件,四目录候选0/删除0/错误0。debug的Last rotated模拟值不代表真实轮转。
每日02:30清理超过7×24小时的AI普通文件(按mtime),不跟随符号链接、不跨挂载点;保留根/子目录。应用活动*.log用logrotate copytruncate归档,归档超过7天删除;不删除活动.log。copytruncate存在很小的并发日志丢失窗口,不承诺审计零丢失。每日一次清理可能比满7天晚不到一天,日志归档内最早内容可能更早。
原crontab备份 /var/backups/foodsafe-maintenance/crontab-before.vSdnaR。已保留两条storcli_monitor任务,追加以下唯一食安任务(仅展示已配置内容,不要重复添加):
30 2 * * * /usr/bin/env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin TZ=Asia/Shanghai /usr/bin/python3 /usr/local/lib/foodsafe-maintenance/cleanup.py --apply > /var/log/foodsafe-maintenance-last.log 2>&1
crond已active,系统时区Asia/Shanghai。计划首次调度2026-10-24 02:30;尚未回传实际执行。首次真实调用logrotate可能只初始化状态,到下一轮才开始日轮转,AI过期判断仍运行。
日常先只预览:
/usr/bin/python3 /usr/local/lib/foodsafe-maintenance/cleanup.py
次日检查实际结果:
tail -n 60 /var/log/foodsafe-maintenance-last.log
crontab -l
应见“实际清理结束”及errors=0。脚本不处理data/uploads、数据库或迁移备份;超过保留期的AI历史图片可能无法显示,但数据库历史记录仍在。维护输出文件只保留最近一次执行,不无限追加。不要将同一轮转配置再放/etc/logrotate.d重复执行。
10. 故障排查顺序
| 现象 | 先检查 | 不要直接做 |
|---|---|---|
| 页面打不开 | 客户访问的是哪套端口、PM2、健康接口、Nginx和防火墙 | 重装/关闭防火墙/重启整机 |
| HTTP200但列表空 | 看响应JSON而非仅标头;学校、食堂、日期及业务归属条件 | 认定数据库没数据、重新导入 |
| 浏览器304 | 停用缓存再看接口正文 | 当作服务错误 |
| 图片404 | 完整URL是否指旧机、对应新机文件是否存在、API是否200 image/* | 全库替换域名/直接开启OSS |
| 晨检无当日数据 | 第二套有效历史最新2026-08-17;区分选错日期和真实上报中断 | 把is_new全部改1 |
| AI没有新记录 | 盒子基础地址、Nginx日志、HTTP状态、落库及通道归属 | 把MQTT成功当HTTP成功、盲开录像缓存任务 |
| MQTT设备不通 | 设备端地址/端口、1883防火墙、账号及Topic、是否仍连旧机 | 用4201/4202代替MQTT1883、重置共享密码 |
| 清理未执行 | crond、root crontab、正式脚本权限、last-run日志 | 执行旧全清脚本或rm -rf |
| 开机后服务没恢复 | 已保存PM2列表、pm2-foodsafe日志、Node路径、达梦状态 | 用root PM2复制启动、kill所有进程 |
当前截图和日志均来自用户现场回传。模型不能假装能直接连客户内网;需要用户执行命令并回传脱敏结果。发送HTTP请求测试设备接口可能产生业务记录,不用空POST或伪造违规代替真实验收。
11. 操作边界与回退
用户目前不允许停服/重启,等两套前厅完成后统一安排。因此本文不提供可以误执行的一键kill/reboot块。需要修改时,先核目标套别、文件指纹/数据库用户和实时状态,给出具体影响与回退路径,再实施。
晨检补丁回退只针对对应套的单个JS模块,从本节列出的准确备份恢复,并在批准窗口定向重启对应foodsafe-N。留样修复回退应根据原值备份逐ID、逐字段核对当前值后事务处理,不能整库恢复覆盖新记录。修复脚本预期旧状态已改变,不能重复执行已完成的旧事务。
数据库/设备密码不在本手册;只在现场权限受控.env和private配置中读取。旧明文密码不从聊天复制到文档。定时清理没有回收站,停用任务不会恢复已删除文件;需要另行备份才能恢复。
12. 当前剩余工作与下次继续入口
| 待办 | 状态与下一动作 |
|---|---|
| 晨检仪、留样秤、农残仪切换及真实上传 | 用户明确暂缓;两套分别HTTP4201/4202保留厂商路径,MQTT1883仅适用使用该协议的设备;验证归属、时间、值、照片和刷新后留存 |
| MQTT设备网络及旧Broker退出 | 本机认证已验证,1883外部规则及设备联调待做;旧状态/共享服务依赖核清后退出旧机 |
| 监管端、手机扫码 | 用户明确暂缓;HTTP200不能算业务验收 |
| 客户普通账号及两套隔离 | 实际普通账号权限验收未确认;管理员登录成功不替代权限隔离验证 |
| 前厅联动 | 前厅两套迁移后验证8080/8081对应,不依赖旧机 |
| 开机恢复 | 已配置enabled,pm2-foodsafe上次MainPID0/inactive,现有两套手动PM2 online;等前厅都完成再安排systemd接管和恢复、必要的整机演练 |
| 备份恢复 | 与DM厂家确认正式备份作业/失败告警/恢复方案,图片独立存储备份待安排;用户已明确暂缓额外打包文件备份,不当作当前运行前置 |
| 清理首轮执行 | 2026-10-24 02:30之后查last-run日志,当前只确认预览与cron启用 |
| 交付版本统一 | 新完整制品纳入晨检源码补丁;现有原包+补丁组合有效,不虚称原包已重新打过;未来维护更新对应手册及本总记录 |
两套各两张缺失历史留样照片、主动清理的AI历史文件是用户接受的例外,不反复追问恢复,不误标为新业务验收通过。充值系统排查已取消,不擅自恢复。
未来用户说“继续运维两套食安”,先读本总记录及所在目录summary.md,然后读具体模块的现场记录。先确认当前新增业务、版本和窗口,再给下一步;不要让用户从安装第一步重新做。