记录一个 远程执行 .sh脚本的问题

是这样的,因为要获取最新的内容,写了一个.sh脚本放在linux中,只有点击按钮的时候(网页发送一个请求,才去拉取新的数据)

本来用 ssh2 是可以执行命令,但没执行过脚本,执行报错了,然后我删掉了一些内容,还是过不了。

 

 

./xxx_new.sh: line 1: : command not found   

/xxx_new.sh: line 1: #编辑脚本:vim: command not found

最开始我以为是环境变量没配好,检查了一下  env | grep ORACLE 权限没给够 chmod -R 6777 /tmp  先给了权限,检查了文件,还是不行。

然后我看日志,打印的内容只有几行,我想会不会是等待时间的问题,没执行完就结束了。

 

找了几篇文章,参考1:

https://www.jianshu.com/p/513c72dfee1b

把原来的执行方式.exec改成了   下面的方式,并加了wait方法,最终可以执行.sh文件了。

sess.requestPTY("bash");  //

sess.startShell();
stdOut = new StreamGobbler(sess.getStdout());
stdErr = new StreamGobbler(sess.getStderr());
BufferedReader stdoutReader = new BufferedReader(new InputStreamReader(stdOut));
BufferedReader stderrReader = new BufferedReader(new InputStreamReader(stdErr));

// 准备输入命令
PrintWriter out = new PrintWriter(sess.getStdin());
// 输入待执行命令
out.println("cd /home/oracle &&./awr_new.sh");//"cd /home/oracle &&./awr_new.sh \n"
out.println("exit");

……

参考2:

调用远程shell脚本_运维_XuJiangDong-CSDN博客 https://blog.csdn.net/xujiangdong1992/article/details/79900812

 

参考3 (这个还没试):

还有可能是执行多条命令的时候,需要设置sleep,这个可能和执行时间有关系。

健哥:

代码框架比较老,用的是struts,我把get/set相关删掉了,main方法懒得写了,其中先调用openConnection方法,然后调用executeCommand方法就可以获得相关返回结果。
特别要注意的是Thread.sleep(sleepTime);这行代码。这行代码让线程睡一段时间是为了等待Linux返回结果,如果不睡,或者睡的时间比较短,会出现无法获取结果,或结果获取不全的情况。具体时间可以去Linux执行相关命令计算需要睡的时间。
总结

其中这个jar还可以实现端口转发,反向代理,等相关功能,等后续再继续添加吧。另外,相关实现ssh2相关功能的jar还有很多,比如jsch等,大家有空可以研究学习下,后续可以一起交流下经验。
————————————————
版权声明:本文为CSDN博主「Mr_小健」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/gao12333/article/details/78831038

 

 

    Thread.sleep(sleepTime);
            in = receiveMsg(sb, ersb, session);

你可能感兴趣的:(问题??,java,linux)