任务中心怎么用
本文是 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 —— 它们的过程细节全在日志行里,看日志而不是看进度条。
日志抽屉怎么看
点「查看日志」打开的抽屉分三块:
- 关键字段:应用、任务类型、执行状态、耗时、当前步骤、进度,以及版本变化(
起始 → 目标); - 失败原因:失败时这里是一条红色的
error_msg,多数情况下原因就在这一句里; - 日志正文:按步骤追加的多行文本,每行带
HH:mm:ss前缀,子步骤会自动带序号。 运行中的任务开着抽屉会跟着刷新。
日志正文是给操作者看的那一层:这次操作做了什么、停在哪。 框架级的原因(类加载、Spring 上下文、MyBatis 映射冲突、远程调用异常栈)不在里面, 要去服务端日志补 —— 见 故障排查。
失败了先看哪三处
按这个顺序看,通常两三步就能定位:
current_step(当前步骤) —— 它告诉你卡在哪一步。步骤名是面向用户的措辞, 直接对应上面那条链路里的某一环;error_msg(失败原因) —— 服务端异常文本,例如「应用包未签名(缺少 signature.txt)」 「找不到后端产物」;- 日志尾部 + 状态 —— 最后几行是失败现场,前面几行告诉你"已经成功做了什么"。 状态是执行中、而记录很久没被刷新,说明进程中途被打断了(等清扫收尾)。
两个直接可用的推论:
- 失败在「执行版本迁移脚本」时,日志里最后一个没有"已执行"记录的脚本就是罪魁;
- 失败在「校验后端产物」时,日志会区分"jar 不存在,还没部署"与"jar 存在但不在运行时 classpath 上", 后者通常是启动方式不对。
看到「超时失败」不要手改库
进程在任务执行中途被杀(重启、OOM、容器被驱逐)时,记录会永远停在"执行中"。 这时由超时清扫按"最后一次进度更新到现在有多久"(默认 10 分钟)把它收敛成 失败 + 当前步骤「超时失败」,并在日志尾部追一行说明。
那条任务的原始日志还在,直接看它最后停在哪一步即可,重试一次通常就行。 阈值与调度周期见 任务中心与日志。
相关阅读
- 任务中心与日志 —— 字段清单、失败点逐条口径、超时清扫参数
- 安装、升级、卸载与启停 —— 动作怎么发起、有什么约束
- 在部署里使用应用 —— 排查速查表与两个需要自己确认的点
- 故障排查 —— 按症状查原因与处理