【教程】青龙面板v2.21.0任务卡在「运行中」还刷 jwt malformed和状态更新失败(Validation failed):三层错因的完整排查记录

【教程】青龙面板v2.21.0任务卡在「运行中」还刷 jwt malformed和状态更新失败(Validation failed):三层错因的完整排查记录

时间煮雨-Master
2026-09-21 / 0 评论 / 16 阅读 / 正在检测是否收录...

先说现象

升级到青龙面板 v2.21.0 之后,跑任何脚本,日志尾部都会多出这样的东西:

## 开始执行... 2026-09-21 09:51:08
...
jwt malformed
## 完成 ✅... 2026-09-21 09:51:09  耗时
状态更新失败(Validation failed) 

Test

脚本本身跑完了,业务逻辑也没问题。但面板上的任务状态永远停在「运行中」,得手动去点停止。日志里既报 Validation failed 又报 jwt malformed,看着像两个毛病,实际上你面对的是三个。

这篇记录把三层错因一层层剥开,每层都给可复现的验证命令和最小改动的修复方案。


一键修复

把文末的脚本存成 ql-fix-all.sh,丢进容器执行:

docker cp ql-fix-all.sh qinglong:/tmp/
docker exec qinglong bash /tmp/ql-fix-all.sh

容器名用 docker ps 查,按实际的改。已经在容器里的话直接 bash ql-fix-all.sh。

脚本自动备份、改完做语法校验、失败自动回滚,重复跑也没副作用。另有两个开关:

bash ql-fix-all.sh -n        # 只看诊断,不改文件
bash ql-fix-all.sh --revert  # 还原

跑完去面板随便跑一个任务,日志结尾只剩 ## 完成 ✅ 这一行,状态能变回「已结束」,就是好了。

不想用脚本也行,下面三个改动手工做一样的效果。


两个必须知道的点

改完那一次运行,日志里还会再报一次同样的错。 因为 shell 是在任务启动时才 source api.sh 的,你改文件的时候,那个任务早就把旧函数读进内存了。它会带着旧函数收尾,所以再刷一次 404。这是正常的「最后一响」,从下一个任务起才干净,不是补丁没生效。

全程不用重启面板。 三处改动都是改文件或改缓存,立即生效。重启面板反而会杀掉正在运行的任务进程,让任务又一次卡在「运行中」——等于自己把刚修好的问题重新制造一遍。


根治

这些都是壳补丁,是在不想重建容器的前提下最轻的止血办法。真正的根治只有一条:把后端/镜像更新到与 shell/*.sh 同版本。升级之后记得把补丁撤掉:

一键修复脚本如下:

0

评论 (0)

取消