程序是服务端的程序,需要通过java调用.sh文件来完成对服务端程序的重启.   服务端程序向外部提供接口,外部程序调用接口完成对服务器的重启操作.   那位做过的给个代码示例.   服务器启动通过./startup.sh启动,本来想写一个restart.sh的脚本,通过java调用来重启,无奈linux入门级,请帮忙,100分送上.

解决方案 »

  1.   

    用Runtime#exec执行restart.sh脚本就可以实现
      

  2.   

    用Runtime#exec执行restart.sh脚本就可以实现
      

  3.   

    Runtime   run   =   Runtime.getRuntime();   
    Process   pro   =   run.exec("restart.sh");
    pro.waitFor();  
      

  4.   

    其中的.sh 建议使用绝对路径,比如
    /usr/local/restart.sh
      

  5.   

    这个是startup.sh的脚本
    #!/bin/bash
    java  -Xms512m -Xmx1024m -classpath lib/antlr-2.7.6.jar:lib/commons-collections-3.2.jar:lib/jta.jar ...... xx.MainClass%1 %2
    java -cp "$CLASSPATH" xx.MainClass> console.log & echo $! > MainClass.pid &
    MainClass是我服务器的启动入口main所在的类.
    脚本也是看到网上其他朋友写的,这个脚本在服务器启动的同时将pid写到MainClass.pid中下面的是restart.sh脚本
    #!/bin/bash
    cat MainClass.pid | xargs kill -9
    java  -Xms512m -Xmx1024m -classpath lib/antlr-2.7.6.jar:lib/commons-collections-3.2.jar:lib/jta.jar ...... xx.MainClass%1 %2这个脚本就是先关闭pid为MainClass.pid的进程
    然后再启动.
    问题是在服务器启动后,利用ps -aux查看进程,没有发现MainClass.pid的值
    java.exe的pid是另外一个值...
      

  6.   

    echo $! > MainClass.pid这个值是执行的bash的进程值,
    跟Java不是一个是正常的。
    而且,系统的进程值是根据运行情况不同所变化的。
      

  7.   

    Java本身不提供类似于提取进程ID这种依存于系统的API。
    在Linux下取得正在运行Java程序的进程ID,
    写一个shell应该是最简单的。
      

  8.   

    考虑到系统在服务器上运行时,可能有多个java.exe,只能在服务启动时获取pid才能确定中止哪个java.exe...
    和同事商量后,决定还是不去用系统的方法,问题在java里面解决.
    将启动和停止放在不同的interface
    服务启动时,调用停止服务器的RMI服务.
    服务停止后,调用启动服务器的RMI服务.启动服务直接Runtime.getRuntime().exec("./startup.sh")完成...
    startup.sh里面同时运行两个rmi服务...
    退出java程序直接使用System.exit(0)完成.
      

  9.   

    Runtime.getRuntime().exec("路径/restart.sh");和运行windows命令差不多的