跳转到正文
帮助与文档 联系支持

商城更新失败排查

区分更新任务与服务器状态,保留备份并处理失败原因。

更新于

适用对象与开始前准备

本文面向已经部署商城、通过商城后台更新系统或插件的管理员。这里的 Agent 是在服务器上执行任务的程序,本文不是 Agent 自身升级教程。

第一次接入服务器或首次安装失败,请先看自动部署错误原因与处理。不要用首次安装去覆盖一个正在运行的商城。

更新前准备好:

  • 可登录的商城管理员账号及相应更新权限。
  • 仍有效且包含更新权益的系统授权;更新插件还需要对应插件权益和安装状态满足条件。
  • 在线的服务器 Agent、正常的 DNS/出站 HTTPS,以及足够容纳程序包和数据库备份的磁盘。
  • 可用的独立数据库和文件备份,以及低业务量的维护时段。

更新可能重启服务;失败后的数据库恢复也可能覆盖备份之后的新数据。请安排维护并减少新增订单等写入,不要把自动回滚当作“业务零影响”的承诺。

从哪里看任务

要处理的内容入口
商城系统程序更新自己的商城后台 /admin/ → “系统维护 → 更新中心” → “更新历史”
插件版本更新自己的商城后台 → “插件中心” → “更新记录”中的“版本更新记录”
插件首次安装或启停等操作“插件中心 → 更新记录”中的“安装与操作记录”,不要混同于版本更新
Agent 是否接入官网客户控制台 → “交易与交付 → 服务器”

系统更新历史可点“查看详情”;进行中的任务可点“刷新”。官网“安装任务”里的“重试安装”不是商城更新重试入口。

先按这五步处理

  1. 找到发生问题的那条任务,记录任务编号、源版本、目标版本、时间、状态、错误详情。页面没显示错误码时,提供原文和任务编号即可。
  2. 若任务仍在更新或回滚,先等待并刷新,不要同时重启、再次更新或手工切换文件。
  3. 若尚未创建任务,检查授权、Agent 和“可用更新”;按下一节处理提示。
  4. 若已失败,按失败阶段查原因。能自行确认的是网络、域名、时间和磁盘;包签名、数据库迁移、版本基线及回滚问题交给支持。
  5. 根据最终状态验收。需要再次执行时,让平台确认可用的后续任务或修订版本,不要反复点同一版本期待重跑。

重复点击同一目标版本,会恢复原任务的进度跟踪,包括已经失败或已回滚的任务,不会自动新建一次更新。 当前更新历史没有通用的“重新执行失败任务”按钮。

没有可用更新,或还没开始就被拦截

提示或现象如何理解与处理
没有可用更新、显示“已是最新”表示当前实例没有可获取的更新,不等于平台没有更新版本。还会受套餐兼容、源版本范围、灰度范围和发布暂停状态影响
agent_offlineAgent 最近未在线。先查官网服务器状态和实际服务,不要新建授权
license_inactivelicense_expiredupdates_not_allowed授权状态、期限或更新权益不满足要求。到官网核对授权及续费
product_version_disabled对应版本的运行开关被停用,联系平台。单纯停止新销售不应等同于停用已有授权
update_already_running同一实例存在安装、更新或尚未解除的人工处理任务,先处理原任务
instance_version_mismatch本机版本和平台记录不一致。先刷新状态;持续出现交支持核对,不要手工改版本号
instance_unauthorized实例身份、授权凭据、绑定域名或实例状态不匹配,交支持核对原安装记录
update_center_unconfigured商城尚未完成更新中心所需的实例配置,不是要求你购买第二份系统
update_service_unavailable商城暂时无法连接控制中心。检查出站 HTTPS、DNS 和时间,持续出现交支持
插件不能更新核对插件授权、安装状态、适用商城版本、依赖和冲突。不能只看系统授权是否正常
夜间没有自动更新开启夜间策略也只执行平台允许自动更新、且当前实例符合条件的版本;需要手动确认的版本不会因此被强制安装

读懂状态和阶段

状态或阶段正在做什么你应该做什么
queued 等待执行等 Agent 领取确认在线,等待;长时间不动则反馈任务编号
prechecking 环境检查检查包描述、版本格式、磁盘和实例环境文件等根据具体错误修复,不要改版本记录
downloading 下载安装包下载任务固定的程序包检查 DNS、HTTPS、时间和下载源
verifying 校验安装包核对大小、哈希、签名,准备目标版本目录校验异常交平台,不能跳过
backing_up 备份中确认当前版本指针并备份实例数据库等待;失败时不会进入后续迁移
migrating 数据迁移执行安装包声明的数据库迁移不要手工补 SQL;失败后观察回滚
switching 切换版本切换程序指针;系统更新还会处理服务、Nginx 和 HTTPS可能短暂中断,等待结果
health_checking 健康检查检查系统或插件健康接口等待结果,不要只凭首页能打开判断
rollbacking 正在回滚尝试恢复数据库和上一版本运行状态不要干预文件或服务
succeeded 更新成功本次任务执行成功刷新版本并验证业务
failed 更新失败任务在进入迁移前失败查原因;并不自动重跑,也不代表没有下载或生成文件
rolled_back 已自动回滚更新未成功,回滚流程完成核对原版本、登录和业务数据,反馈原错误
manual_intervention 需要人工处理自动回滚没有完成停止进一步变更,立即联系支持

失败、已回滚、需要人工处理也可能显示 100%。判断依据是状态和实际访问结果,不是百分比。

按错误阶段排查

update_prechecking_failed:环境或包参数不符合要求

常见详情包括版本格式不正确、包地址或大小异常、公钥配置无效、环境文件缺失、数据库连接串字段缺失或重复、磁盘不足。

先确认目标是平台提供的正式更新,并检查服务器磁盘。环境文件和发布公钥交管理员核对,不要把文件内容发到工单。

技术边界:此阶段读取数据库配置不等于已经成功连接数据库;旧版本 current 指针等问题通常还会在“备份中”暴露。旧式目录布局需经支持评估迁移,不能自行改一个文件夹名字冒充新布局。

update_downloading_failed:下载未完成或文件大小不符

核对服务器 DNS、出站 HTTPS、系统时间。HTTP 404/5xx 或下载字节数与任务快照不符时,由平台核对下载源和发布文件。

不要关闭 TLS 校验,也不要自行下载其他版本替换缓存。更新任务固定了包的快照,平台改了商品资料不代表原任务会自动使用新文件。

update_verifying_failed:完整性或目录验证失败

可能是 SHA-256、Ed25519 签名、包大小不匹配,或解包后的目录结构、入口文件不符合要求。

由平台核对正式构建产物、签名和发布快照。包描述格式、身份不符也可能在更早的环境检查阶段失败,因此应看错误详情,不要只按错误码猜原因。不要修改校验值或让 Agent 信任来源不明的公钥。

update_backing_up_failed:当前版本或数据库备份异常

可能是 current 未指向任务记录的原版本、目标版本未准备好、mysqldump 不可用、数据库无法连接或无备份权限,以及空间不足或备份为空。

先由管理员核对当前实际版本、数据库服务、工具和权限。备份没有完成时,流程不会继续执行本次迁移。不要删除旧版本、备份目录或直接修改平台版本号来跳过这一关。

update_migrating_failed:数据库迁移失败

可能是迁移文件异常、SQL 与数据库版本或现有结构不兼容,或账户没有所需权限。任务会尝试自动回滚,等待最终结果。

由平台在隔离环境复现并处理后续发布。不要在生产库执行网上找到的修表语句,也不要手工补半段 SQL 后继续原任务。

update_switching_failed:切换或启动失败

系统更新可能遇到服务模板、目录权限、Nginx 冲突、程序启动或证书问题。插件更新主要切换对应插件目录,不能把所有切换错误都当成 Nginx 故障。

常见详情核对内容
systemd template does not use managed current link and environment file平台核对包内服务模板,不由客户改发布包
nginx server name is already configured管理员核对同域名的另一份站点配置,不删除整个配置目录
Baota ACME request failed公共 DNS、外网 80、CDN 代理、宝塔 ACME 模块和证书机构限制
managed certificate is expired or does not match domain系统时间、证书域名及剩余有效期,激活检查要求至少覆盖未来约 7 天
HTTPS health endpoint did not become ready本机 443、可信证书链、Nginx 与商城服务

等待回滚结果,保留原错误。不要在任务切换或回滚时手工替换证书、修改受管配置或重启整台服务器。

update_health_checking_failed:服务未通过健康检查

系统更新通过本机 Socket 检查商城健康接口;插件更新检查该插件声明的健康接口。需要 HTTP 200 且响应状态为 ok

可能是进程没有正常启动、没有监听预期 Socket、数据库异常或插件健康接口异常。由管理员核查该任务对应的服务日志,等待自动回滚;浏览器首页能打开也不能替代这项检查。

update_rollback_failed:自动恢复没有完成

任务会进入 manual_intervention。可能数据库恢复失败、旧版本标记或文件不完整、旧服务无法启动,或 Nginx 无法恢复。

立即停止继续安装、更新和手工改文件,联系支持保全现场并评估恢复。不要删除 current、版本目录、备份或数据库,也不要将任务强行标记成功。

此时不能因为首页偶尔能打开就认定安全恢复。由支持核对任务与实例、备份和版本的一致性后,再安排恢复及验收。

更新成功或回滚后的验收

更新成功时:

  1. 等待页面重新加载,或重新登录商城后台,确认当前系统版本已变为目标版本。
  2. 插件更新则在“插件中心”核对对应插件版本和状态,不能只看商城系统版本。
  3. 从外网检查 HTTPS 首页、后台登录、关键页面和已有订单读取;核对所需插件功能。
  4. 检查更新历史没有新的失败或人工处理任务,并继续观察日志和业务情况。

已回滚时,目标版本没有安装成功。核对原版本能运行、关键数据无异常,将更新失败原因交给支持。备份之后产生的订单或其他写入需要专门核对,不能只检查页面。

技术说明与只读诊断

以下内容给服务器管理员,普通用户提供任务编号即可。

  • 更新包要求 format: 2layout: versioned,版本号为三个数字段,如 1.2.3。套餐编号和商城程序版本不是同一个字段。
  • 新版本首次安装已支持相同的分版本布局;不能再把所有首次安装都描述成旧式直铺目录。
  • 预检查要求程序目录和工作目录所在文件系统各有至少“包大小 × 3 + 512 MiB”的可用空间。这是门槛,不含对大数据库备份容量的充分估算。
  • 默认实例环境文件为 /etc/kasuteng-mall/<实例ID>.env,含敏感连接信息。只核对存在性和权限,不公开内容。
  • 实例可能使用域名目录,也可能位于域名下的 instances/<实例ID>;插件有自己的组件目录和版本指针。实际位置以任务和服务配置为准,不要机械套用一个路径。
  • 备份涵盖实例数据库,并记录原版本位置,不是整台服务器的文件备份。迁移之后失败会尝试恢复数据库、原版本及对应运行配置;文件备份仍须另行安排。
  • 商城程序启动时还会应用内嵌的未执行迁移,相关错误可能表现为切换或健康检查失败,并不一定都出现在 migrating 阶段。
  • 系统激活会检查证书并在需要时申请,本机 HTTPS 检查连接的是 127.0.0.1:443,使用实际域名验证证书。它不验证外部安全组已放行,也不能当作持续自动续签保证。

可先执行这些只读检查:

date -Is
df -h /www /var/lib
systemctl is-active kasuteng-agent.service
systemctl status kasuteng-agent.service --no-pager
journalctl -u kasuteng-agent.service -n 100 --no-pager
/www/server/nginx/sbin/nginx -t

商城服务名和实例目录由管理员按具体任务确认,再查看对应日志。不要批量停止服务、输出整份环境配置,或把 SQL 备份上传公开位置。

提交工单时附任务编号、实例编号、源/目标版本、错误时间、状态及必要的脱敏日志。不要附 root 密码、Token、一次性接入命令、授权密钥、数据库连接串、证书私钥、支付密钥或带签名参数的下载地址。