java 定时重启_用 java实现定时重启windows指定服务

package com.test.processManagement;

import java.io.BufferedReader;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.PrintStream;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.Timer;

import java.util.TimerTask;

/**

*

ServRebootScheWin

*

* Exam

*

* com.test.processManagement

*

* ServRebootScheWin.java

*

* 2012-7-11

*

* 本程序用于每天定时重启windows系统上的指定服务,并记录日志

*

* @author Wero

*

*/

public

class ServRebootScheWin {

public

static

void main(String[] args) {

// store the console output

final PrintStream console = System.out;

if (args.length < 2) {

LOG("参数不全,程序将退出...");

Runtime.getRuntime().exit(-1);

}

final String timeStr = args[0];// 每tb天重启时间(HH:mm:ss)

final String servName = args[1];// 服务名

if (args.length >= 3) {

try {

System.setOut(new PrintStream(new FileOutputStream(args[2])));

} catch (FileNotFoundException e) {

System.setOut(console);

LOG("日志文件无法建立...");

}

}

// convert time string to Date type

Date date = null;

try {

date = new SimpleDateFormat("HH:mm:ss").parse(timeStr);

} catch (ParseException e1) {

LOG("日期格式(HH:mm:ss)错误,程序将退出...");

Runtime.getRuntime().exit(-1);

}

// schedule the specific windows service to reboot at specific time

// every day

rebootEveryDayTime(date, servName);

// add shutdown hook to recover system.out to console when program exits

Runtime.getRuntime().addShutdownHook(new Thread() {

@Override

public

void run() {

System.setOut(console);

}

});

}

private

static

void rebootEveryDayTime(Date date, final String servName) {

new Timer().schedule(new TimerTask() {

public

void run() {

try {

reboot(servName);

} catch (Exception e) {

LOG("重启出现异常:" + e.getMessage());

}

}

}, date, 24 * 60 * 60 * 1000);

}

private

static

void reboot(String servName) throws IOException, InterruptedException {

LOG("重启服务:" + servName);

Process procStop;

Process procStart;

int stopState = -1;

int startState = -1;

// stop the specific service

procStop = Runtime.getRuntime().exec("net stop \"" + servName + "\"");

stopState = getProcExecStat(procStop);

LOG(getProcOutput(procStop));

// wait for 10 seconds

try {

Thread.sleep(10 * 1000);

} catch (InterruptedException e) {

LOG("线程等待时中断...");

e.printStackTrace();

}

// restart

procStart=Runtime.getRuntime().exec("net start \"" + servName + "\"");

startState = getProcExecStat(procStart);

LOG(getProcOutput(procStart));

//if stop exec and start exec both return with failed flag,exists

if (stopState != 0 && startState != 0) {

LOG("重启失败,请确认服务名是否有效,程序将退出...");

} else {

LOG("重启成功.");

}

}

private

static

int getProcExecStat(Process proc) {

try {

return proc.waitFor();

} catch (InterruptedException e) {

LOG("线程等待时中断...");

e.printStackTrace();

}

return -1;

}

private

static String getProcOutput(Process proc) throws IOException, InterruptedException {

InputStream is = proc.getInputStream();

String line;

StringBuffer strResult = new StringBuffer();

BufferedReader reader = new BufferedReader(new InputStreamReader(is));

while ((line = reader.readLine()) != null) {

strResult.append(line);

}

is.close();

return strResult.toString().trim();

}

private

static

void LOG(String info) {

if (info != null && !info.equals("")) {

System.out.println("windows服务监控器--------" + getCurrentTime() + "----------->" + info);

}

}

private

static String getCurrentTime() {

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");

return sdf.format(new Date());

}

// public enum ExecuteStates {

//

// SUCCEED(0, ""), STATERR_STOPPED(1, "服务已停止"), STATERR_STATED(3, "服务已开始"),

// STATERR_NOTFOUND(

// 2, "服务名无效");

//

// ExecuteStates(int code, String desc) {

// this.code = code;

// this.desc = desc;

// }

//

// private final int code;

// private final String desc;

//

// // regular get method

// public String getDesc() {

// return desc;

// }

//

// public static String getDescByCode(int code){

// for (ExecuteStates e:ExecuteStates.values()){

// if(e.code==code){

// return e.desc;

// }

// }

// return null;

// }

// }

}

posted on 2012-07-25 15:30 chen11-1 阅读(1710) 评论(0)  编辑  收藏

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值