Wujies 无界平台
基础

任务中心怎么用

本文是 1.x 的归档文档(冻结于 1.x)。该分支只接收勘误修正, 内容基本不再变动;文中的源码路径、配置项与版本号均以 1.x 为准,不建议用于新项目。

新项目请查看 5.x 最新文档。已在 1.x 上运行的项目,本文仍是可靠依据。

安装、升级、启用、停用、卸载、部署这些动作都是异步的:接口立刻返回一个 taskId, 真正的过程在后台跑,进度与日志落在任务记录表里。「任务中心」就是读这张表的界面。

排查任何应用生命周期问题,第一站都是它 —— 比翻服务端日志快。

这一页的边界

这一页只讲怎么看:在哪看、每一列是什么、失败了先看哪三处。 任务表的完整字段清单、每个高频失败点的逐条定位口径、超时清扫的配置项, 在 任务中心与日志;服务端日志的位置见 运维手册。

在哪

  • 入口:我的应用 → 应用任务(路由 /myapps/task,源码 plus-ui/src/views/appstore/tasks/index.vue)
  • 列表:GET /app/install/task/list(权限 app:install:list)—— 分页
  • 详情(含日志正文):GET /app/install/task/{taskId}(权限 app:install:list)
  • 删除记录:DELETE /app/install/task/{taskId}(权限 app:install:edit)
列表为什么看不到日志

一条任务的日志可能有几十 KB,一页几十条就是几 MB。所以列表刻意不带日志正文, 只给状态、进度、当前步骤与耗时;日志点「查看日志」进详情抽屉看。

列表上每一列是什么

列看它能回答什么
应用哪个应用。彻底删除过的应用会显示「(应用已删除)」—— 那是审计线索的代价
类型安装 / 升级 / 修复 / 启用 / 停用 / 卸载 / 回滚。升级那行下面还会带 起始版本 → 目标版本
状态执行中 / 成功 / 失败 / 已取消
进度0–100 的进度条,失败时变红
当前步骤卡在哪一步;失败时这里是最后进入的步骤,超时收尾时是「超时失败」
耗时从开始到结束(详情里更精确)
开始时间什么时候跑的

还有两个操作:查看日志(权限 app:install:list)与删除(权限 app:install:edit, 执行中的任务不显示删除按钮,后端也会拒)。

「删除」删的是记录,不是卸载

它只删掉这条执行留痕,不影响应用的安装状态。确认弹窗里写明了这一点, 点之前别理解成"把应用删掉"。

自动刷新:列表里只要还有执行中的任务,就每 1.5 秒轮询一次;全部结束自动停。 排查时想冻住当前画面(例如想逐字读一段日志),把标题栏那个「自动刷新」开关关掉即可。

进度台阶:10 / 20 / 30 / 40 / 60 / 100

进度是边跑边落库的:每推进一步或写一条日志就立刻更新一次,所以运行中的任务能实时看到 "现在到哪了",而不是跑完才一次性出现。

一次插件型应用的安装会走完整条台阶,每一步都对应一个真实动作:

进度步骤名对应动作
10执行安装任务开始,先落一条记录
20从应用市场拉取安装包下载 → 校验 MD5/SHA256 → 安全检查 → 解包落位
30执行版本迁移脚本按文件名排序逐个执行包内迁移脚本
40校验后端产物:<jar>确认后端产物真的进了运行时;纯前端应用这一步写作「校验后端产物」
60同步菜单与授权按清单幂等 upsert 菜单,再授权给本租户管理员角色
100完成状态落终态,日志尾部追一行「安装成功」
台阶不是所有任务都有

台阶由安装器逐步写入。内置模块型应用、以及启用 / 停用 / 卸载这类动作没有中间的 20 / 30 / 40 / 60, 只会有 10 与 100 —— 它们的过程细节全在日志行里,看日志而不是看进度条。

日志抽屉怎么看

点「查看日志」打开的抽屉分三块:

  1. 关键字段:应用、任务类型、执行状态、耗时、当前步骤、进度,以及版本变化(起始 → 目标);
  2. 失败原因:失败时这里是一条红色的 error_msg,多数情况下原因就在这一句里;
  3. 日志正文:按步骤追加的多行文本,每行带 HH:mm:ss 前缀,子步骤会自动带序号。 运行中的任务开着抽屉会跟着刷新。

日志正文是给操作者看的那一层:这次操作做了什么、停在哪。 框架级的原因(类加载、Spring 上下文、MyBatis 映射冲突、远程调用异常栈)不在里面, 要去服务端日志补 —— 见 故障排查。

失败了先看哪三处

按这个顺序看,通常两三步就能定位:

  1. current_step(当前步骤) —— 它告诉你卡在哪一步。步骤名是面向用户的措辞, 直接对应上面那条链路里的某一环;
  2. error_msg(失败原因) —— 服务端异常文本,例如「应用包未签名(缺少 signature.txt)」 「找不到后端产物」;
  3. 日志尾部 + 状态 —— 最后几行是失败现场,前面几行告诉你"已经成功做了什么"。 状态是执行中、而记录很久没被刷新,说明进程中途被打断了(等清扫收尾)。

两个直接可用的推论:

  • 失败在「执行版本迁移脚本」时,日志里最后一个没有"已执行"记录的脚本就是罪魁;
  • 失败在「校验后端产物」时,日志会区分"jar 不存在,还没部署"与"jar 存在但不在运行时 classpath 上", 后者通常是启动方式不对。

看到「超时失败」不要手改库

进程在任务执行中途被杀(重启、OOM、容器被驱逐)时,记录会永远停在"执行中"。 这时由超时清扫按"最后一次进度更新到现在有多久"(默认 10 分钟)把它收敛成 失败 + 当前步骤「超时失败」,并在日志尾部追一行说明。

那条任务的原始日志还在,直接看它最后停在哪一步即可,重试一次通常就行。 阈值与调度周期见 任务中心与日志。

相关阅读

目录