当前位置:首页 » 编程软件 » java调用sh脚本

java调用sh脚本

发布时间: 2025-02-18 02:06:47

① sh脚本如何自动执行java程序,并且该脚本如何被定期调用

各位好我有一个问题,是这样: 环境:有一套管理系统(包括联机和批量),该管理系统白天运行联机系统,晚上运行批量系统。 目的:联机系统运行到晚上,会停掉,这时候通过在unix下的sh脚本调用并且启动批量系统。 sh脚本可以调用java程序,通过java程序就可以启动了批量系统。 andilyliao 写道最简单的方法 你可以用java写一个job 然后每天晚上执行sh mginobili 写道可以在脚本中 实现一个定时功能啊 比如每隔半小时 检查一次当前的时间 如果到了晚上 就停止联机系统,运行批量系统 当然前提是 这个sh脚本要一直保持运行状态 并且其错误处理机制要完善问题补充:哦。你的意思是不是这样啊, 这个sh脚本作为一个定时器,定时调用启动联机系统或者批量系统的程序。 通过while(1)这样一个循环,一直运行不中断,然后sleep一定时间,就调用联机的启动程序,再过一定时间,关闭联机启动批量系统。

② 通过java程序(JSch)运行远程linux主机上的shell脚本

通过Java程序运行远程Linux主机上的shell脚本是可能的,这需要借助JSch库来实现。

在使用之前,请确保远程主机已经开启SSH服务。接下来,通过Maven坐标引入JSch依赖库,以执行远程主机上的脚本。

创建名为“hello.sh”的文件,内容仅用于测试,即输出“hello ”。将此文件保存在远程主机的“/root”目录下,并为脚本设置可执行权限。

使用以下Java代码在本地执行远程主机上的shell脚本,代码中包含了详细的注释以说明其功能。执行后,可以在本地控制台获取远程主机上shell脚本的执行结果。

实例代码演示了如何实现远程Linux主机上的shell脚本执行。此外,代码可以通过进一步封装来提供更简便的使用方式。

总结,通过Java程序和JSch库可以轻松运行远程Linux主机上的shell脚本,并获取执行结果。

③ 如何在java程序中调用linux命令或者shell脚本

这里不得不提到java的process类了。
process这个类是一个抽象类,封装了一个进程(你在调用linux的命令或者shell脚本就是为了执行一个在linux下执行的程序,所以应该使用process类)。
process类提供了执行从进程输入,执行输出到进程,等待进程完成,检查进程的推出状态,以及shut down掉进程。
至于详细的process类的介绍放在以后介绍。
另外还要注意一个类:Runtime类,Runtime类是一个与JVM运行时环境有关的类,这个类是Singleton的。
这里用到的Runtime.getRuntime()方法是取得当前JVM的运行环境,也是java中唯一可以得到运行环境的方法。(另外,Runtime的大部分方法都是实例方法,也就是说每次运行调用的时候都需要调用到getRuntime方法)
下面说说Runtime的exec()方法,这里要注意的有一点,就是public Process exec(String [] cmdArray, String [] envp);这个方法中cmdArray是一个执行的命令和参数的字符串数组,数组的第一个元素是要执行的命令往后依次都是命令的参数,envp感觉应该和C中的execve中的环境变量是一样的,envp中使用的是name=value的方式。
下面说一下,如何使用process来调用shell脚本
例如,我需要在linux下实行linux命令:sh test.sh,下面就是执行test.sh命令的方法:
这个var参数就是日期这个201102包的名字。
String shpath="/test/test.sh"; //程序路径
Process process =null;
String command1 = “chmod 777 ” + shpath;
process = Runtime.getRuntime().exec(command1);
process.waitFor();
String var="201102"; //参数
String command2 = “/bin/sh ” + shpath + ” ” + var;
Runtime.getRuntime().exec(command2).waitFor();
注意:
1
我为什么要使用 chmod 777命令呢?在有的机器上面,可能没有设置权限问题。这是你在linux下面执行shell脚本需要注意的问题。没有的话,就需要添加权限,就用chmod 777,否则在执行到Runtime.getRuntime().exec的时侯会出现Permission denied错误。
2
waitFor()这个也是必不可缺的,如果你需要执行多行命令的话,把waitFor()这个加上。

④ 如何在java程序中调用linux命令或者shell脚本

java程序是提供了这个一方法,Processpro=Runtime.getRuntime().exec(cmds);
但是一般来说,尽量去用一些其他脚本(lua,shell,python)去执行一系列linux命令比较灵活, 而且耗费资源少。但是Runtime.getRuntime().exec()这种调用方式在java虚拟机中是十分消耗资源的,即使命令可以很快的执行完毕,频繁的调用时创建进程消耗十分可观。
java虚拟机执行这个命令的过程是,首先克隆一条和当前虚拟机拥有一样环境变量的进程,再用这个新的进程执行外部命令,最后退出这个进程。频繁的创建对CPU和内存的消耗很大。


下面是一个调用linux命令的例子:

publicclassTest{
publicstaticvoidmain(String[]args)throwsException{
String[]cmds={"/bin/sh","-c","ps-ef|grepjava"};
Processpro=Runtime.getRuntime().exec(cmds);
pro.waitFor();//阻塞,直到上述命令执行完
InputStreamin=pro.getInputStream();
BufferedReaderread=newBufferedReader(newInputStreamReader(in));
Stringline=null;
while((line=read.readLine())!=null){
System.out.println(line);
}
}
}

注:参数中逗/bin/sh逗 逗-c逗 是可以用shell执行指定的命令的意思
这里/bin/sh -cps -ef|grep java,会执行ps linux命令

⑤ java怎么调用shell脚本

//用法:Runtime.getRuntime().exec("命令");Stringshpath="/test/test.sh";//程序路径Processprocess=null;Stringcommand1=“chmod777”+shpath;try{Runtime.getRuntime().exec(command1).waitFor();}catch(IOExceptione1){e1.printStackTrace();}catch(InterruptedExceptione){e.printStackTrace();}Stringvar="201102";/参数Stringcommand2=“/bin/sh”+shpath+””+var;Runtime.getRuntime().exec(command2).waitFor();

热点内容
基于arm的linux 发布:2025-03-04 22:08:30 浏览:586
安卓手机如何秒截屏 发布:2025-03-04 21:47:31 浏览:815
python财务数据分析 发布:2025-03-04 21:37:01 浏览:711
iphone访问限制密码初始 发布:2025-03-04 21:37:00 浏览:56
服务器伪装ip如何破解 发布:2025-03-04 21:25:54 浏览:1003
iphone6怎么解锁屏密码 发布:2025-03-04 21:21:38 浏览:136
微信少儿编程 发布:2025-03-04 21:12:45 浏览:194
lol服务器连不上怎么办 发布:2025-03-04 20:56:13 浏览:680
米侠里面的脚本有什么用 发布:2025-03-04 20:52:22 浏览:591
xmlmd5加密 发布:2025-03-04 20:52:22 浏览:813