调试代码时发现一个很奇怪的问题,本地通过java执行命令行时没有报错
log.info("commendStr={}",commandStr);
Process p = Runtime.getRuntime().exec(commandStr, null , new File(cmdPath));
if(p !=null){
p.getOutputStream().close();
}
br =new BufferedReader(new InputStreamReader(p.getInputStream()));
String line =null;
StringBuilder sb =new StringBuilder();
while ((line = br.readLine()) !=null) {
sb.append(line +"\n");
}
int i = p.waitFor();
log.info("process wait for return --->{}",i);
主要功能是执行commandStr 的命令
但是通过jekins发布项目到其他机器会发现无法识别commandStr中的命令,在部署的机器上查看path环境变量也没发现问题,将命令单独在机器上运行也没问题
通过jekins编写了一个shell脚本 直接执行 shell中的命令为查询path 发现执行出来的结果和机器上查询出来的结果不一致,重启jekins后代码能正常运行
由此初步得出结论 jekins启动后将path环境变量写入了自己缓存中,外部机器path改动并不会导致jekins刷新缓存变量,如果代码中有使用命令行依赖path的需要特别注意:加入到path时间和jekins的启动时间前后关系