综合 部署脚本退出码 127/126/137/139:Linux 自动化安装失败的排查路径

2026-09-12 21:02:58

部署脚本退出码 127/126/137/139:Linux 自动化安装失败的排查路径

自动化脚本(安装/部署)失败时,先别急着重跑,先归类。常见四类:环境依赖冲突(库版本不匹配、ABI 缺失,优先级高)、资源配额限制(磁盘耗尽、文件描述符溢出)、权限与安全策略(SELinux 拦截、Capability 缺失,优先级高)、脚本逻辑错误(语法错误、未处理的信号中断)。

退出码 → 含义 → 排查动作

退出码是最直接的诊断入口。

退出码含义排查动作
127Command not found脚本调用的二进制不在 PATH,或依赖的解释器(如 /usr/bin/python3)缺失。检查环境变量 env
126Permission denied文件存在但不可执行,或受 noexec 挂载选项限制。检查 ls -l 权限位及挂载点属性
137SIGKILL进程被内核强制杀死,通常是 OOM Killer。检查 dmesg | grep -i oom
139SIGSEGV段错误,通常是 ABI 不兼容。检查 ldd 输出

日志与追踪

  1. 脚本卡死用 strace -f -o trace.log ./install.sh,观察最后几行 openatexecve 的返回值;
  2. 内核级审计 dmesg -T | tail -n 50,看内核模块加载失败或硬件 I/O 错误;
  3. 网络可达性用 curl -Iv 观察 TCP 握手与 TLS 协商,或用 mtr 看链路丢包;不要只写「检查网络」。

防御性调试

脚本头部加上这样一段:

#!/bin/bash
set -euxo pipefail

trap 'echo "Error at line $LINENO: $BASH_COMMAND"; exit 1' ERR

command -v curl >/dev/null 2>&1 || { echo "curl 未安装,终止执行"; exit 1; }

exec > >(tee -i /var/log/install_debug.log) 2>&1

这套片段能把大部分隐蔽错误暴露到控制台。仍解决不了时,看 /var/log/syslog/var/log/messages 里的具体错误堆栈。

脚本崩溃不是偶然,是环境预期与实际执行的偏差;盲目重跑只会掩盖配置腐化。

复制全文 生成海报 Shell 运维 故障排查

推荐文章

程序员茄子在线接单