c#监听tomcat服务
https://blog.csdn.net/bornonew/article/details/68941510
在VS2008中创建一个web service项目。
创建两个WebMethod。
1.启动Tomcat方法
1 /// 2 /// 启动权限系统 3 /// 4 /// true:成功;false:失败 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 /// 2 /// 关闭权限系统 3 /// 4 /// true:成功;false:失败 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无返回而服务并未在停止状态,直接杀死相应进程,而不是去等待服务停止。