通过SSHJ安装软件返回exit code 127:CentOS下自动部署Linpack失败
问题排查步骤
- 打印执行上下文校验:在自动化代码中执行
cd l_mpi_2019.8.254的前后,分别插入执行pwd的逻辑输出当前工作目录,同时打印最终执行的./install.sh命令的原始字符串,确认是否存在转义字符、路径拼接错误。注意./install.sh和.//install.sh在Linux系统下完全等效,多余的斜杠不会触发127报错,你猜测的斜杠转义问题不成立。 - 校验文件状态:自动化流程进入目标目录后,先执行
ls -l install.sh,确认文件确实存在、且对自动化程序的运行用户开放了可执行权限。手动执行时你可能默认使用root账号、或提前手动加了执行权限,而自动化程序的运行用户权限、执行上下文都可能和手动操作不一致,权限不足也会触发127类报错。 - 确认shell会话独立性:绝大多数同类问题的诱因是自动化工具执行每一条命令时会启动独立的shell会话,你单独执行的
cd l_mpi_2019.8.254只在当前会话生效,后续执行./install.sh时会回到程序默认的工作目录,相当于在根目录或者其他错误路径下执行./install.sh,自然找不到文件。 - 检查脚本解释器配置:查看
install.sh文件的首行shebang声明(比如#!/bin/bash),确认自动化程序调用的shell环境和PuTTY手动使用的shell环境一致,避免因默认shell为dash等其他解释器、找不到依赖组件触发报错。
解决方案
- 合并命令到同一会话执行:不要分开执行路径切换和安装命令,将两条命令合并为单条执行:
cd l_mpi_2019.8.254 && ./install.sh,保证路径切换和脚本执行在同一个shell会话中生效。 - 用绝对路径执行脚本:直接拼接解压目录的绝对路径执行脚本,无需切换工作目录,比如压缩包上传到
/data/linpack/目录的话,直接执行/data/linpack/l_mpi_2019.8.254/install.sh,彻底规避工作目录切换失效的问题。 - 提前赋予执行权限:解压完成后先执行
chmod +x l_mpi_2019.8.254/install.sh,确保脚本对运行用户开放可执行权限后再启动安装。 - 指定解释器执行:如果是shebang不兼容的问题,直接指定bash解释器运行脚本,命令示例:
cd l_mpi_2019.8.254 && bash install.sh,跳过shebang的解析逻辑。
内容的提问来源于stack exchange,提问作者Korlimann
相关产品推荐
相关产品推荐

