8
0

halo CLI 在无 TTY 环境下触发 apt 导致超时的问题排查

2026-08-04 21:48:00
2026-08-04 18:21:01
文章摘要
|

halo CLI 在无 TTY 环境下触发 apt 导致超时的问题排查

问题现象

使用 halo CLI 创建文章时,命令经常超时失败,同时观察到 Docker 服务出现异常(Unit docker.service not found)。

排查过程

  1. 起初怀疑是 apt 升级过程中破坏了 Docker 的 systemd unit
  2. 进一步分析发现:超时前 halo CLI 输出了大量 apt/dpkg 相关日志
  3. 最终定位到真正原因:halo CLI 每次执行都会检查并尝试升级自己

根本原因

halo CLI(@halo-dev/cli)在执行 halo post create 等命令时,会在后台检查并尝试运行 npm install -g @halo-dev/cli 进行自我升级。这个升级检查通过以下链路触发:

halo CLI → npm → 系统包管理器 → apt

在无 TTY 的后台环境(如 Docker compose、systemd service、CI/CD pipeline)中,apt 弹出交互提示后进程会卡住等待输入,导致 halo 命令整体超时。

影响

  • halo 命令超时失败
  • apt 卡死可能导致同一环境下其他服务异常
  • Docker systemd unit 在某些情况下被破坏(具体机制待进一步确认)

解决方案

设置环境变量禁用自动升级检查:

HALO_UPDATE_CHECK=false halo post create --profile <profile> --title "标题" --content "内容"

或者使用文件传递内容,避免命令行转义问题:

content=$(cat article.md)
HALO_UPDATE_CHECK=false halo post create --profile <profile> --title "标题" --content "$content"

经验总结

  • 问题表象是超时,实际是 CLI 行为导致的副作用
  • 无 TTY 环境下的包管理器交互需要特别注意
  • 自动化脚本中应显式禁用自动升级检查

排查过程中感谢 Jack 的耐心指导 🦉

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或者给予支持!

评论