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编程语言以其跨平台特性而闻名,但通过特定的API,我们可以在Windows操作系统上实现一些特定功能,如定时关机、重启和注销。这个名为"Java编写的定时关机程序!只适用于Windows"的项目就是一个很好的例子,展示了...
Java打包Windows自启动服务工具是Java开发者为了在Windows操作系统上实现程序自动启动而设计的一款实用工具。这个工具能够帮助开发者将Java应用程序打包成Windows服务,使得应用能够在系统启动时自动运行,无需用户...
总的来说,Java Service Wrapper是Java应用程序在Windows环境下实现服务化的重要工具,它简化了服务的管理和维护,提高了系统的稳定性。通过深入理解和正确配置,开发者可以充分利用其特性,为Java应用程序提供可靠...
要实现Tomcat的自动定时重启,我们可以借助任务计划程序,这是一个操作系统级别的工具,可以按预设的时间执行指定的任务。在Windows系统中,我们可以使用任务计划程序来安排这两个批处理文件的执行时间;在Linux系统...
这样,你可以编写一个Java服务来实现定时任务,然后调用系统特定的API来执行关机、注销或重启。 5. **安全与权限**: 执行关机、注销或重启等操作通常需要管理员权限。因此,运行包含此类功能的Java程序时,可能...
### Windows系统下启动与结束Java的JAR包的脚本(包括如何设置进程名称) 在Windows环境下管理和控制Java应用程序的启动与停止是一项常见的任务。本文将详细介绍如何编写一个批处理脚本来实现这些功能,并且还会...
这样,我们就设置了一个定时任务,按照指定时间自动执行restart.bat,从而实现Tomcat的定时重启。 值得注意的是,这种方法适用于小型项目或者测试环境,对于生产环境,我们可能需要更复杂和灵活的解决方案,如使用...
在Java中实现定时任务通常会用到`java.util.Timer`类或`java.time`包中的定时器功能,如`ScheduledExecutorService`。在`Timer`类中,我们可以创建`TimerTask`来定义执行的逻辑,并通过`schedule()`方法设置执行的...
【标题】:“Tomcat定时重启方案” 【描述】:本文将详细介绍如何配置Tomcat进行定时重启,...综上,定时重启和安全配置都是维护Tomcat稳定运行的重要环节,通过上述步骤,您可以实现Tomcat的自动化管理和安全防护。
2. **API调用**:实现定时关机或重启的小程序通常会利用操作系统提供的API(应用程序接口),例如在Windows中,可以调用`ExitWindowsEx`或`InitiateSystemShutdown`函数来实现关机,而`RestartComputer`函数用于重启...
5. **服务管理**:安装完成后,这个Java应用就可以像其他系统服务一样进行管理,包括启动、停止、重启和设置启动类型(自动、手动或禁用)。可以通过“服务”管理工具或者命令行(如`net start/stop 服务名`)来操作...
要实现定时关机、重启或注销的功能,我们需要利用Windows API函数。Windows API提供了许多与系统操作相关的函数,比如`InitiateSystemShutdown`用于关机,`ExitWindowsEx`用于注销,以及`SetThreadExecutionState`...
3. **重启机制**:如果发现 Tomcat 服务未响应且进程不存在,则尝试停止已有的 Tomcat 进程(如果存在),然后重新启动 Tomcat 服务。 #### 代码解析 ```java import java.net.URL; import java.net.URLConnection...
在IT领域,定时关机是一项基础但非常实用的功能,它允许用户设置一个特定的时间,让计算机在达到这个时间点后自动关闭。这个功能在多种场景下都...同时,源码也可以作为基础,扩展出更多功能,比如定时重启、休眠等。
在Windows 2003环境下,使用SVN(Subversion)服务器进行异机同步和Java项目的自动部署是一项高效且规范的开发流程管理方法。这里我们将详细介绍如何设置SVN服务器,实现代码的自动更新、编译和部署,以及如何利用...
在IT领域,定时启动应用程序是一项常见的需求,尤其对于那些需要在特定时间运行的服务或工具,如下载工具迅雷。本文将详细讲解如何实现定时启动迅雷,并探讨相关的知识点。 首先,"定时启动迅雷"意味着我们需要设置...