java 调用 shell 脚本

java 调用 shell 脚本,第1张

在写程序时,有时需要在java程序中调用shell脚本,可以通过Runtime的exec方法来调用shell程序,运行脚本。每个Java 应用程序都有一个Runtime 类实例,使应用程序能够与其运行的环境相连接。通过Runtime对象可以返回运行环境的情况,包括CPU数,虚拟机内存大小等,并能够通过exec方法调用执行命令。可以通过getRuntime 方法获取当前Runtime实例。 public boolean ExeShell(){ Runtime rt = Runtime.getRuntime() try { Process p = rt.exec(checkShellName) if(p.waitFor() != 0) return false } catch (IOException e) { SysLog.error("没有找到检测脚本") return false } catch (InterruptedException e) { e.printStackTrace() return false } return true} 其中p.waitFor()语句用来等待子进程结束,其返回值为进程结束退出码。

1、最常用的方法:

Process p = Runtime.getRuntime().exec(SHELL_FILE_DIR + RUNNING_SHELL_FILE + 

            " "+param1+" "+param2+" "+param3) 

int runnngStatus = p.waitFor()

2、通过ProcessBuilder进行调度,这种方法比较直观,而且参数的设置也比较方便:

ProcessBuilder pb = new ProcessBuilder("./" + RUNNING_SHELL_FILE, param1,

                                               param2, param3)

pb.directory(new File(SHELL_FILE_DIR))

int runningStatus = 0

String s = null

try {

     Process p = pb.start()

     try {

        runningStatus = p.waitFor()

     } catch (InterruptedException e) {

       e.printStackTrace()

     }

} catch (IOException e) {

  e.printStackTrace()   

}

if (runningStatus != 0) {

}

return

参数说明:

RUNNING_SHELL_FILE:要运行的脚本

SHELL_FILE_DIR:要运行的脚本所在的目录; 当然你也可以把要运行的脚本写成全路径。

runningStatus:运行状态,0标识正常。 详细可以看java文档。

param1, param2, param3:可以在RUNNING_SHELL_FILE脚本中直接通过1,1,2,$3分别拿到的参数。

对于Java应用程序(非web应用) 在部署后 常常需要一个启动脚本来加载一些第三方的jar包 并启动应用

对于java应用程序 我一般喜欢将程序的目录结构写成如下的方式

myapp

| lib

| bin

| packages

一些配置文件和属性文件

一个startup sh 或bat启动脚本

其中 packages是程序的根包 其中有子包和class文件等

在包中 有一个Main calss的类 这个作为程序的入口

下面给出一个最一般的写法

startup sh #!/bin/sh

programdir=

num=$#

temp=$CLASSPATH

#setting libs path

libs= /lib/*

append(){

temp=$temp : $

}

for file in $libsdo

append $file

done

export CLASSPATH=$temp: : /:$programdir

export LANG=zh_CN

nohup java classpath $CLASSPATH    packaages xxx yyy Main &

这样 只要按照上面的方式组织程序 启动脚本就需要改动下Main前面的包路径即可

nohup 上面脚本中最后一行前有nohup 这是将程序的输入输出都将附加到当前目录的 nohup out 文件中

lishixinzhi/Article/program/Java/hx/201311/25993


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11565966.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存