`
623deyingxiong
  • 浏览: 190136 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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;

/**
 * <title>ServRebootScheWin</title>
 * 
 * <project>Exam</project>
 * 
 * <package>com.test.processManagement</package>
 * 
 * <file>ServRebootScheWin.java</file>
 * 
 * <date>2012-7-11</date>
 * 
 * <brief>本程序用于每天定时重启windows系统上的指定服务,并记录日志</brief>
 * 
 * @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];// 每天重启时间(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;
	// }
	// }

}

分享到:
评论

相关推荐

    java定时关机

    Java定时关机程序是一种利用Java编程语言实现的自动化任务,它可以按照预设的时间对操作系统进行关机、重启或注销操作。这种程序在系统维护、无人值守的自动化流程中有着广泛的应用。下面我们将深入探讨Java定时关机...

    自动定时重启软件

    总的来说,这个Java版的定时重启程序为用户提供了便利,通过简单的设置就能自动化处理软件的重启工作,减轻了用户的负担,尤其适用于那些需要定期重启的服务或者应用程序。它的设计和实现结合了Java的跨平台能力、...

    Java编写的定时关机程序!只适用于Windows

    Java编程语言以其跨平台特性而闻名,但通过特定的API,我们可以在Windows操作系统上实现一些特定功能,如定时关机、重启和注销。这个名为"Java编写的定时关机程序!只适用于Windows"的项目就是一个很好的例子,展示了...

    java打包windows自启动服务工具.zip

    Java打包Windows自启动服务工具是Java开发者为了在Windows操作系统上实现程序自动启动而设计的一款实用工具。这个工具能够帮助开发者将Java应用程序打包成Windows服务,使得应用能够在系统启动时自动运行,无需用户...

    Java Service Wrapper 将你的java应用程序安装成windows系统服务

    总的来说,Java Service Wrapper是Java应用程序在Windows环境下实现服务化的重要工具,它简化了服务的管理和维护,提高了系统的稳定性。通过深入理解和正确配置,开发者可以充分利用其特性,为Java应用程序提供可靠...

    tomcat自动定时重启

    要实现Tomcat的自动定时重启,我们可以借助任务计划程序,这是一个操作系统级别的工具,可以按预设的时间执行指定的任务。在Windows系统中,我们可以使用任务计划程序来安排这两个批处理文件的执行时间;在Linux系统...

    java 定时关机

    这样,你可以编写一个Java服务来实现定时任务,然后调用系统特定的API来执行关机、注销或重启。 5. **安全与权限**: 执行关机、注销或重启等操作通常需要管理员权限。因此,运行包含此类功能的Java程序时,可能...

    windows 系统下启动与结束java的jar包的脚本(包括如何设置进程名称)

    ### Windows系统下启动与结束Java的JAR包的脚本(包括如何设置进程名称) 在Windows环境下管理和控制Java应用程序的启动与停止是一项常见的任务。本文将详细介绍如何编写一个批处理脚本来实现这些功能,并且还会...

    简易的定时重启tomcat方案

    这样,我们就设置了一个定时任务,按照指定时间自动执行restart.bat,从而实现Tomcat的定时重启。 值得注意的是,这种方法适用于小型项目或者测试环境,对于生产环境,我们可能需要更复杂和灵活的解决方案,如使用...

    java Swing定时关机

    在Java中实现定时任务通常会用到`java.util.Timer`类或`java.time`包中的定时器功能,如`ScheduledExecutorService`。在`Timer`类中,我们可以创建`TimerTask`来定义执行的逻辑,并通过`schedule()`方法设置执行的...

    tomcat定时重启方案

    【标题】:“Tomcat定时重启方案” 【描述】:本文将详细介绍如何配置Tomcat进行定时重启,...综上,定时重启和安全配置都是维护Tomcat稳定运行的重要环节,通过上述步骤,您可以实现Tomcat的自动化管理和安全防护。

    定时关机重启的小程序

    2. **API调用**:实现定时关机或重启的小程序通常会利用操作系统提供的API(应用程序接口),例如在Windows中,可以调用`ExitWindowsEx`或`InitiateSystemShutdown`函数来实现关机,而`RestartComputer`函数用于重启...

    jar打包成windows服务工具

    5. **服务管理**:安装完成后,这个Java应用就可以像其他系统服务一样进行管理,包括启动、停止、重启和设置启动类型(自动、手动或禁用)。可以通过“服务”管理工具或者命令行(如`net start/stop 服务名`)来操作...

    定时关机重启注销

    要实现定时关机、重启或注销的功能,我们需要利用Windows API函数。Windows API提供了许多与系统操作相关的函数,比如`InitiateSystemShutdown`用于关机,`ExitWindowsEx`用于注销,以及`SetThreadExecutionState`...

    Windows下 tomcat的守护进程、心跳程序

    3. **重启机制**:如果发现 Tomcat 服务未响应且进程不存在,则尝试停止已有的 Tomcat 进程(如果存在),然后重新启动 Tomcat 服务。 #### 代码解析 ```java import java.net.URL; import java.net.URLConnection...

    定时关机定时关机定时关机定时关机

    在IT领域,定时关机是一项基础但非常实用的功能,它允许用户设置一个特定的时间,让计算机在达到这个时间点后自动关闭。这个功能在多种场景下都...同时,源码也可以作为基础,扩展出更多功能,比如定时重启、休眠等。

    windows2003中SVN服务器异机同步、自动部署Java项目全流程

    在Windows 2003环境下,使用SVN(Subversion)服务器进行异机同步和Java项目的自动部署是一项高效且规范的开发流程管理方法。这里我们将详细介绍如何设置SVN服务器,实现代码的自动更新、编译和部署,以及如何利用...

    定时启动迅雷等程序,简单易用!

    在IT领域,定时启动应用程序是一项常见的需求,尤其对于那些需要在特定时间运行的服务或工具,如下载工具迅雷。本文将详细讲解如何实现定时启动迅雷,并探讨相关的知识点。 首先,"定时启动迅雷"意味着我们需要设置...

Global site tag (gtag.js) - Google Analytics