亲测脚本调用工具类,demo以windows脚本bat和cmd为例。
设计目的:实现远程重启服务的控制操作。
前置条件:需要在E盘新建测试脚本invokingMyMethod.cmd,
模拟脚本内容为:
@echo on
rem @echo E:\自学实验室
rem cmd
@echo off
color 0f
title 查看本机 IP 配置信息
goto start
ipconfig>E:\test.txt 命令行返回值输出到系统文件中
只用“>”是覆盖现有的结果,每一个命令结果会覆盖现有的txt文件,如果要保存很多命令结果的话,就需要建立不同文件名的txt文件。
要在同一个txt文件里面追加cmd命令结果,用“>>”替换“>” 就可以了.
:start
ipconfig
echo.
pause
下面是shell工具类:ShellUtil
package testCommonTool;
import java.io.*;
public class ShellUtil {
public static void main(String[] args) throws Exception
{
//一次性执行多个命令
String shStr = "cmd /c \"cd/d e:\\ && dir && invokingMyMethod.cmd\"";
runShell(shStr);
}
public static String runShell(String cmd) throws Exception
{
Process process;
try
{
Runtime runtime = Runtime.getRuntime();
System.out.println("开始执行...");
//process = Runtime.getRuntime().exec(new String[]{"/bin/sh","-c",cmd});
process = runtime.exec(cmd);
//打印执行的输出结果
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is, "gbk"); //gbk:解决输出乱码
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null)
{
System.out.println(line);
}
process.waitFor();
is.close();
isr.close();
br.close();
process.destroy();
} catch (IOException e)
{
e.printStackTrace();
System.out.println(e.getMessage());
}
return "opertion is ok!";
}
/**
* 启动Tomcat程序
*
* @param programPath
* @param batName
*
//启动Tomcat
runbat("F:\apache-tomcat-7.0.54", "bin\\startup.bat");
//关闭Tomcat
runbat("F:\apache-tomcat-7.0.54", "bin\\shutdown.bat");
*/
public static void runbat(String programPath, String batName){
Runtime rt = Runtime.getRuntime();
Process ps = null;
try {
// 提示
// The CATALINA_HOME environment variable is not defined correctly
// This environment variable is needed to run this program
// ps = rt.exec("cmd.exe /c " + batName);
ps = rt.exec("cmd /c " + programPath + File.separator + batName, null, new File(programPath));
InputStream is = ps.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
ps.waitFor();
is.close();
reader.close();
ps.destroy();
} catch (Exception e) {
e.printStackTrace();
}
}
}
实现远程重启tomcat服务器还需要针对个人实际服务器路径修改programPath参数,另外,需要注意,远程重启需要另外搭建一个服务器,同时修改端口,以避免启动时端口冲突,将本文给出的工具类以及对应页面调用部署到新的服务器中,以最终实现远程服务器重启。