“cannot execute binary file” 基本只会由 二进制与运行环境不匹配 或 文件本身不可执行 两类问题触发。SonarQube 9.2.2 的 wrapper
是 64-bit x86 Linux ELF,可用下面的排查顺序快速定位并解决:
1. 确认架构:必须是 64-bit x86_64
uname -m # 应返回 x86_64
• 如果返回 aarch64、armv7l、s390x、i686 等 → 该机器架构不受支撑。
解决:
– 换到 x86_64 服务器;或
– 使用官方 Docker 镜像(linux/amd64 平台跑在 amd64 兼容层),ARM 机器可用 docker run --platform linux/amd64 …
。
2. 检查二进制是否损坏
file $SONAR_HOME/bin/linux-x86-64/wrapper
应看到类似
ELF 64-bit LSB executable, x86-64 …
.
若报 “data” 或显示奇怪 → 下载包损坏。重新解压/重新下载。
3. 权限是否可执行
chmod +x $SONAR_HOME/bin/linux-x86-64/wrapper
然后再执行 ./sonar.sh start
。
4. 被错误目录调用
有时管理员把 sonar.sh
软链到别处,但 $SONAR_HOME
没设置好,脚本会去找 bin/linux-x86-32/wrapper(32 位),结果报错。
验证脚本找的是哪一个:
grep wrapper $SONAR_HOME/bin/sonar.sh | head -1
确保路径中含 linux-x86-64
。若不是,修正 $SONAR_HOME
环境变量或重新展开安装包。
5. glibc 版本过旧(罕见)
SonarQube 9.x 需要 glibc ≥ 2.17。
ldd --version
若低于 2.17,升级系统(RHEL/CentOS 6,SLES 11 等均过旧)。
6. SELinux / 安全软件拦截(极少)
• 先用 sudo setenforce 0
(临时关闭 SELinux)试跑;
• 或检查防护软件日志(Deep-Security、360 等)是否拦截 ELF 执行。
快速修复思路
- 换用官方 ZIP/TAR 包重新部署,确保解压到干净路径;
- 确保服务器是 64-bit x86_64 且 glibc ≥ 2.17;
chmod +x bin/linux-x86-64/wrapper
;- 再次执行
(确保走对目录)$SONAR_HOME/bin/linux-x86-64/sonar.sh start
只要架构、权限、文件完整 3 项符合,wrapper
报 “cannot execute binary file” 就能消除,SonarQube 会正常启动。若仍有疑问,把完整错误行 (./wrapper: Exec format error
, Bad ELF interpreter
等) 贴出来便可进一步定位。