Java调用BAT

Java通过调用BAT启动程序,如果启动失败,则删除对应PID,重新启动。

  1.         public void restart(){
  2.             SimpleDateFormat m_sdfNowDate = new SimpleDateFormat("yyyyMMddHHmmss");
  3.             //设定LOG文件。文件名格式为(日期.log)
  4.             File logFile = new File(m_sdfNowDate.format(Calendar.getInstance().getTime())+".log");
  5.             try
  6.             {
  7.                 log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":the program is starting.");
  8.                 //取得配置文件
  9.                 ResourceBundle stats = ResourceBundle.getBundle("config");
  10.                 //  取得重新启动的路径
  11.                 String sRestartPath = stats.getString("restartPath");
  12.                 //  取得重新启动的路径
  13.                 String sRestartName = stats.getString("restartname");
  14.                 //  取得第一次启动前停留时间
  15.                 long nTimeBeforRestart = Long.parseLong(stats.getString("timeBeforRestart"));
  16.                 //  取得第二次启动前停留时间
  17.                 long nTimeBeforRestartSecond = Long.parseLong(stats.getString("timeBeforRestartSecond"));
  18.                 //取得第一次重启所需时间
  19.                 long nRestartTimeFirst = Long.parseLong(stats.getString("restartTimeFirst"));
  20.                 //取得第二次重启所需时间
  21.                 long nRestartTimeSecond = Long.parseLong(stats.getString("restartTimeSecond"));
  22.                 //取得PID档案所放置的位置
  23.                 String sPidAdress = stats.getString("pidAdress");
  24.                 //PID档案集合
  25.                 String arrayPidAdress [] = sPidAdress.split(",");
  26.                 //重启前PID代号集合
  27.                 String arrayPidBefore [] = new String[arrayPidAdress.length];
  28.                 //重启后PID代号集合
  29.                 String arrayPidAfter [] = new String[arrayPidAdress.length];
  30.                 
  31.                 String spidGet = "";
  32.                 //获取重启前PID的集合
  33.                 for(int i=0;i<arrayPidAdress.length;i++){
  34.                     BufferedReader xBuffReadBefore = new BufferedReader(new InputStreamReader(new FileInputStream(arrayPidAdress[i]), "UTF-8"));
  35.                     String sPidBefore = xBuffReadBefore.readLine();
  36.                     if(sPidBefore==null || sPidBefore.equalsIgnoreCase("")){
  37.                         arrayPidBefore[i]="0";
  38.                     }else {
  39.                         spidGet = spidGet+sPidBefore+":";
  40.                         arrayPidBefore[i]=sPidBefore;
  41.                     }
  42.                     xBuffReadBefore.close();
  43.                 }
  44.                 log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":the pid getting :"+spidGet);
  45.                 log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":waiting befor the first time running.");
  46.                 //获取PID后,重启前等待时间
  47.                 Thread.currentThread().sleep(nTimeBeforRestart*1000);
  48.                 //第一次重新启动服务器
  49.                 Runtime.getRuntime().exec("cmd.exe /c  "+"start /d "+sRestartPath+" "+sRestartName);
  50.                 log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":run the restart and begin the first time running waiting.");
  51.                 //第一次启动等待时间
  52.                 Thread.currentThread().sleep(nRestartTimeFirst*1000);
  53.                 log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":after the first time waiting.");
  54.                 //获取第一次启动后的PID的集合。
  55.                 for(int i=0;i<arrayPidAdress.length;i++){
  56.                     BufferedReader xBuffReadAfter = new BufferedReader(new InputStreamReader(new FileInputStream(arrayPidAdress[i]), "UTF-8"));
  57.                     String sPidAfter = xBuffReadAfter.readLine();
  58.                     if(sPidAfter==null || sPidAfter.equalsIgnoreCase("")){ 
  59.                         arrayPidAfter[i]="0";
  60.                     }else {
  61.                         arrayPidAfter[i]=sPidAfter;
  62.                     }
  63.                     xBuffReadAfter.close();
  64.                 }
  65.                 //默认设定为已经重新启动
  66.                 boolean boolRestartSucess = true;
  67.                 //通过PID判断是否成功启动
  68.                 for(int i=0;i<arrayPidBefore.length;i++){
  69.                     //因为前面已经如果获取的PID为空的情况设定为“0”,此处不处理为空的情况。
  70.                     if(arrayPidBefore[i].equalsIgnoreCase(arrayPidAfter[i])){
  71.                         boolRestartSucess =  false;
  72.                         break;
  73.                     }
  74.                 }
  75.                 if(boolRestartSucess){
  76.                     //重启成功
  77.                     log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":the first time restarting is OK.");
  78.                 }else{
  79.                     //重启失败
  80.                     log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":the first time restarting is Error.");
  81.                     //删除java.exe of PID
  82.                     for(int i=0;i<arrayPidAfter.length;i++){
  83.                         Runtime.getRuntime().exec("ntsd -c q -p "+arrayPidAfter[i]);
  84.                         Thread.currentThread().sleep(10000);
  85.                     }
  86.                     //第二次重启前等待时间
  87.                     log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":waiting befor the second time running.");
  88.                     Thread.currentThread().sleep(nTimeBeforRestartSecond*1000);
  89.                     //第二次重新启动服务器
  90.                     Runtime.getRuntime().exec("cmd.exe /c  "+"start /d "+sRestartPath+" "+sRestartName);
  91.                     log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":run the restart and begin the second time running waiting .");
  92.                     //第二次启动等待时间
  93.                     Thread.currentThread().sleep(nRestartTimeSecond*1000);
  94.                     log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":after the second time waiting.");
  95.                     //获取第二次启动后的PID的集合。
  96.                     for(int i=0;i<arrayPidAdress.length;i++){
  97.                         BufferedReader xBuffReadAfter = new BufferedReader(new InputStreamReader(new FileInputStream(arrayPidAdress[i]), "UTF-8"));
  98.                         String sPidAfter = xBuffReadAfter.readLine();
  99.                         if(sPidAfter==null || sPidAfter.equalsIgnoreCase("")){
  100.                             arrayPidAfter[i]="0";
  101.                         }else {
  102.                             arrayPidAfter[i]=sPidAfter;
  103.                         }
  104.                         xBuffReadAfter.close();
  105.                     }
  106.                     //默认设定为已经重新启动
  107.                     boolean boolRestartSucessSecond = true;
  108.                     //通过PID判断是否成功启动
  109.                     for(int i=0;i<arrayPidBefore.length;i++){
  110.                         //因为前面已经如果获取的PID为空的情况设定为“0”,此处不处理为空的情况。
  111.                         if(arrayPidBefore[i].equalsIgnoreCase(arrayPidAfter[i])){
  112.                             boolRestartSucessSecond =  false;
  113.                             break;
  114.                         }
  115.                     }
  116.                     if(boolRestartSucessSecond){
  117.                         //第二次重启成功。
  118.                         log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":the second time restarting is OK.");
  119.                     }else{
  120.                         //第二次重启失败。
  121.                         log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":the second time restarting is Error.");
  122.                         
  123.                     }
  124.                     log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":the programe is over.");
  125.                 }
  126.             }
  127.             catch (Exception e)
  128.             {
  129.                 log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":the program has some problem:"+e.toString());
  130.             }
  131.         }
  132.         public  void log(File file,String xsContent){
  133.             try { 
  134.                     FileOutputStream fout = new FileOutputStream(file,true); 
  135.                     String scontent = xsContent+"/n";
  136.                     byte[] b = scontent.getBytes(); 
  137.                     fout.write(b); 
  138.                     fout.close();
  139.             } catch (Exception e) { 
  140.                     e.printStackTrace(); 
  141.             }
  142.         }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值