遇到了这么一个需求,要求远程通过Java调用服务器上的sh脚本。首先通过SSH获取连接,再通过传入合法的命令调用执行。在此就碰到了个坑,执行一些简单的命令脚本没有问题,当涉及到其他应用服务需要用到JDK环境才能执行的命令时,便会报找不到JRE或是请用JDK *** (版本)运行的错误提示。检查之后发现,明明在/etc/profile中配置过环境变量了,java -version 一点毛病也没有的怀况怎么还会找不到呢?
重点来了,其实很好解决,就是一个命令的事,但其罪魁祸首可能就是:ssh客户端的shell 可能是csh 、tcsh 、zsh ,其不会读取/etc/profile,而目标机器的shell是bash;
正确的做法就是在command命令字符串前加上bash -lc :
如ssh.command("bash -lc 'java -version');
完美解决!
参考自:https://www.cnblogs.com/huangjianan/p/3972738.html;
Java远程调用脚本文件小工具下载:https://download.csdn.net/download/minantadd/12035339