Java通过调用BAT启动程序,如果启动失败,则删除对应PID,重新启动。
- publicvoidrestart(){
- SimpleDateFormatm_sdfNowDate=newSimpleDateFormat("yyyyMMddHHmmss");
- //设定LOG文件。文件名格式为(日期.log)
- FilelogFile=newFile(m_sdfNowDate.format(Calendar.getInstance().getTime())+".log");
- try
- {
- log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":theprogramisstarting.");
- //取得配置文件
- ResourceBundlestats=ResourceBundle.getBundle("config");
- //取得重新启动的路径
- StringsRestartPath=stats.getString("restartPath");
- //取得重新启动的路径
- StringsRestartName=stats.getString("restartname");
- //取得第一次启动前停留时间
- longnTimeBeforRestart=Long.parseLong(stats.getString("timeBeforRestart"));
- //取得第二次启动前停留时间
- longnTimeBeforRestartSecond=Long.parseLong(stats.getString("timeBeforRestartSecond"));
- //取得第一次重启所需时间
- longnRestartTimeFirst=Long.parseLong(stats.getString("restartTimeFirst"));
- //取得第二次重启所需时间
- longnRestartTimeSecond=Long.parseLong(stats.getString("restartTimeSecond"));
- //取得PID档案所放置的位置
- StringsPidAdress=stats.getString("pidAdress");
- //PID档案集合
- StringarrayPidAdress[]=sPidAdress.split(",");
- //重启前PID代号集合
- StringarrayPidBefore[]=newString[arrayPidAdress.length];
- //重启后PID代号集合
- StringarrayPidAfter[]=newString[arrayPidAdress.length];
- StringspidGet="";
- //获取重启前PID的集合
- for(inti=0;i<arrayPidAdress.length;i++){
- BufferedReaderxBuffReadBefore=newBufferedReader(newInputStreamReader(newFileInputStream(arrayPidAdress[i]),"UTF-8"));
- StringsPidBefore=xBuffReadBefore.readLine();
- if(sPidBefore==null||sPidBefore.equalsIgnoreCase("")){
- arrayPidBefore[i]="0";
- }else{
- spidGet=spidGet+sPidBefore+":";
- arrayPidBefore[i]=sPidBefore;
- }
- xBuffReadBefore.close();
- }
- log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":thepidgetting:"+spidGet);
- log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":waitingbeforthefirsttimerunning.");
- //获取PID后,重启前等待时间
- Thread.currentThread().sleep(nTimeBeforRestart*1000);
- //第一次重新启动服务器
- Runtime.getRuntime().exec("cmd.exe/c"+"start/d"+sRestartPath+""+sRestartName);
- log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":runtherestartandbeginthefirsttimerunningwaiting.");
- //第一次启动等待时间
- Thread.currentThread().sleep(nRestartTimeFirst*1000);
- log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":afterthefirsttimewaiting.");
- //获取第一次启动后的PID的集合。
- for(inti=0;i<arrayPidAdress.length;i++){
- BufferedReaderxBuffReadAfter=newBufferedReader(newInputStreamReader(newFileInputStream(arrayPidAdress[i]),"UTF-8"));
- StringsPidAfter=xBuffReadAfter.readLine();
- if(sPidAfter==null||sPidAfter.equalsIgnoreCase("")){
- arrayPidAfter[i]="0";
- }else{
- arrayPidAfter[i]=sPidAfter;
- }
- xBuffReadAfter.close();
- }
- //默认设定为已经重新启动
- booleanboolRestartSucess=true;
- //通过PID判断是否成功启动
- for(inti=0;i<arrayPidBefore.length;i++){
- //因为前面已经如果获取的PID为空的情况设定为“0”,此处不处理为空的情况。
- if(arrayPidBefore[i].equalsIgnoreCase(arrayPidAfter[i])){
- boolRestartSucess=false;
- break;
- }
- }
- if(boolRestartSucess){
- //重启成功
- log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":thefirsttimerestartingisOK.");
- }else{
- //重启失败
- log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":thefirsttimerestartingisError.");
- //删除java.exeofPID
- for(inti=0;i<arrayPidAfter.length;i++){
- Runtime.getRuntime().exec("ntsd-cq-p"+arrayPidAfter[i]);
- Thread.currentThread().sleep(10000);
- }
- //第二次重启前等待时间
- log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":waitingbeforthesecondtimerunning.");
- Thread.currentThread().sleep(nTimeBeforRestartSecond*1000);
- //第二次重新启动服务器
- Runtime.getRuntime().exec("cmd.exe/c"+"start/d"+sRestartPath+""+sRestartName);
- log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":runtherestartandbeginthesecondtimerunningwaiting.");
- //第二次启动等待时间
- Thread.currentThread().sleep(nRestartTimeSecond*1000);
- log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":afterthesecondtimewaiting.");
- //获取第二次启动后的PID的集合。
- for(inti=0;i<arrayPidAdress.length;i++){
- BufferedReaderxBuffReadAfter=newBufferedReader(newInputStreamReader(newFileInputStream(arrayPidAdress[i]),"UTF-8"));
- StringsPidAfter=xBuffReadAfter.readLine();
- if(sPidAfter==null||sPidAfter.equalsIgnoreCase("")){
- arrayPidAfter[i]="0";
- }else{
- arrayPidAfter[i]=sPidAfter;
- }
- xBuffReadAfter.close();
- }
- //默认设定为已经重新启动
- booleanboolRestartSucessSecond=true;
- //通过PID判断是否成功启动
- for(inti=0;i<arrayPidBefore.length;i++){
- //因为前面已经如果获取的PID为空的情况设定为“0”,此处不处理为空的情况。
- if(arrayPidBefore[i].equalsIgnoreCase(arrayPidAfter[i])){
- boolRestartSucessSecond=false;
- break;
- }
- }
- if(boolRestartSucessSecond){
- //第二次重启成功。
- log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":thesecondtimerestartingisOK.");
- }else{
- //第二次重启失败。
- log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":thesecondtimerestartingisError.");
- }
- log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":theprogrameisover.");
- }
- }
- catch(Exceptione)
- {
- log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":theprogramhassomeproblem:"+e.toString());
- }
- }
- publicvoidlog(Filefile,StringxsContent){
- try{
- FileOutputStreamfout=newFileOutputStream(file,true);
- Stringscontent=xsContent+"\n";
- byte[]b=scontent.getBytes();
- fout.write(b);
- fout.close();
- }catch(Exceptione){
- e.printStackTrace();
- }
- }