c#监听tomcat服务
https://blog.csdn.net/bornonew/article/details/68941510
在VS2008中创建一个web service项目。
创建两个WebMethod。
1.启动Tomcat方法
1 /// <summary> 2 /// 启动权限系统 3 /// </summary> 4 /// <returns>true:成功;false:失败</returns> 5 [WebMethod] 6 public bool StartPM() 7 { 8 try 9 {10 // 创建进程启动信息 11 ProcessStartInfo sinfo = new ProcessStartInfo(AppDomain.CurrentDomain.BaseDirectory + "start.bat");12 // 获取系统环境变量 13 IDictionary dics = Environment.GetEnvironmentVariables(EnvironmentVariableTarget.Machine);14 foreach (string key in dics.Keys)15 {// 将系统环境变量加入新进程环境变量中 16 if (sinfo.EnvironmentVariables.ContainsKey(key)) continue;17 sinfo.EnvironmentVariables.Add(key, dics[key].ToString());18 }19 // 不需要从系统外壳程序创建,直接从文件创建 20 sinfo.UseShellExecute = false;21 Process.Start(sinfo);22 }23 catch (Exception ex)24 {25 //TODO: 写日志 26 return false;27 }28 return true;29 }
2.关闭Tomcat方法
1 /// <summary> 2 /// 关闭权限系统 3 /// </summary> 4 /// <returns>true:成功;false:失败</returns> 5 [WebMethod] 6 public bool StopPM() 7 { 8 try 9 {10 // 创建进程启动信息 11 ProcessStartInfo sinfo = new ProcessStartInfo(AppDomain.CurrentDomain.BaseDirectory + "stop.bat");12 // 获取系统环境变量 13 IDictionary dics = Environment.GetEnvironmentVariables(EnvironmentVariableTarget.Machine);14 foreach (string key in dics.Keys)15 {// 将系统环境变量加入新进程环境变量中 16 if (sinfo.EnvironmentVariables.ContainsKey(key)) continue;17 sinfo.EnvironmentVariables.Add(key, dics[key].ToString());18 }19 // 不需要从系统外壳程序创建,直接从文件创建 20 sinfo.UseShellExecute = false;21 Process.Start(sinfo);22 }23 catch (Exception ex)24 {25 //TODO: 写日志 26 return false;27 }28 return true;29 }
为了方便以后配置我有新建了两个bat文件胸围。在这两个文件中分别做调用Tomcat的startup.bat和shutdown.bat的操作。具体如下:
1.start.bat
1 K:\apache-tomcat-6.0.30\bin\startup.bat
2.stop.bat
1 K:\apache-tomcat-6.0.30\bin\shutdown.bat
转载于:https://my.oschina.net/linuxred/blog/38746
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无返回而服务并未在停止状态,直接杀死相应进程,而不是去等待服务停止。