tomcat服务总是莫名其妙的挂掉,暂时无法解决,只能写个监听服务,检测tomcat服务,如果停止,就去启动它。刚开始用java写的,发现不太好做成服务,最后用c#开发windows服务。
建立windows服务可参考
http://www.cnblogs.com/sorex/archive/2012/05/16/2502001.html
判断标准
1.服务是否停止
2.发送http请求是否有返回
判断服务是否停止
public bool IsStop()
{
bool isStop = false;
using (System.ServiceProcess.ServiceController control = new ServiceController(serviceName))
{
WriteLog(control.Status.ToString());
if (control.Status == System.ServiceProcess.ServiceControllerStatus.Stopped)
{
isStop = true;
}
}
return isStop;
}
判断HTTP是否有返回
public bool IsResponse()
{
bool isRes = false;
System.Net.HttpWebRequest request;
int counter = 0;
request = (System.Net.HttpWebRequest)WebRequest.Create(strUrl);
request.Timeout = 10000;
//request.Method="get";
System.Net.HttpWebResponse response;
while (counter < 3)
{
WriteLog("try connect:" + counter);
counter++;
try
{
response = (System.Net.HttpWebResponse)request.GetResponse();
isRes = true;
counter = 10;
WriteLog("connect success");
break;
}
catch (WebException ex)
{
WriteLog("connect fail");
Thread.Sleep(3000);
}
}
return isRes;
}
定时任务执行内容
private void timerCall(object obj)
{
try
{
if (IsStop())
{
using (System.ServiceProcess.ServiceController control = new ServiceController(serviceName))
{
control.Start();
}
}
else if (!IsResponse())
{
Process[] processes = Process.GetProcessesByName(exeName);
foreach (Process p in processes)
{
WriteLog("kill Start.");
p.Kill();
p.Close();
WriteLog("kill end.");
}
}
}
catch (Exception ex)
{
WriteLog(ex.ToString());
}
}
调试方法可参考
http://www.cnblogs.com/brucezhang80/p/4177913.html
源代码
说明
debug模式下,把输出类型改为控制台应用程序,方便调试
release模式下,把输出类型改为Windows 应用程序
考虑到有时候服务停止时间很长。当测试页面HTTP无返回而服务并未在停止状态,直接杀死相应进程,而不是去等待服务停止。