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请求是否有返回

 

判断服务是否停止

 

  1.  
    public bool IsStop()
  2.  
    {
  3.  
    bool isStop = false;
  4.  
    using (System.ServiceProcess.ServiceController control = new ServiceController(serviceName))
  5.  
    {
  6.  
    WriteLog(control.Status.ToString());
  7.  
    if (control.Status == System.ServiceProcess.ServiceControllerStatus.Stopped)
  8.  
    {
  9.  
    isStop = true;
  10.  
    }
  11.  
    }
  12.  
    return isStop;
  13.  
    }

 

 

判断HTTP是否有返回

 

  1.  
    public bool IsResponse()
  2.  
    {
  3.  
    bool isRes = false;
  4.  
    System.Net.HttpWebRequest request;
  5.  
    int counter = 0;
  6.  
    request = (System.Net.HttpWebRequest)WebRequest.Create(strUrl);
  7.  
    request.Timeout = 10000;
  8.  
     
  9.  
    //request.Method="get";
  10.  
    System.Net.HttpWebResponse response;
  11.  
    while (counter < 3)
  12.  
    {
  13.  
    WriteLog("try connect:" + counter);
  14.  
    counter++;
  15.  
    try
  16.  
    {
  17.  
    response = (System.Net.HttpWebResponse)request.GetResponse();
  18.  
    isRes = true;
  19.  
    counter = 10;
  20.  
    WriteLog("connect success");
  21.  
    break;
  22.  
    }
  23.  
    catch (WebException ex)
  24.  
    {
  25.  
    WriteLog("connect fail");
  26.  
    Thread.Sleep(3000);
  27.  
    }
  28.  
    }
  29.  
    return isRes;
  30.  
    }

 

定时任务执行内容

 

  1.  
    private void timerCall(object obj)
  2.  
    {
  3.  
    try
  4.  
    {
  5.  
    if (IsStop())
  6.  
    {
  7.  
    using (System.ServiceProcess.ServiceController control = new ServiceController(serviceName))
  8.  
    {
  9.  
    control.Start();
  10.  
    }
  11.  
    }
  12.  
    else if (!IsResponse())
  13.  
    {
  14.  
    Process[] processes = Process.GetProcessesByName(exeName);
  15.  
     
  16.  
    foreach (Process p in processes)
  17.  
    {
  18.  
    WriteLog("kill Start.");
  19.  
    p.Kill();
  20.  
    p.Close();
  21.  
    WriteLog("kill end.");
  22.  
    }
  23.  
    }
  24.  
    }
  25.  
    catch (Exception ex)
  26.  
    {
  27.  
    WriteLog(ex.ToString());
  28.  
    }
  29.  
     
  30.  
    }



调试方法可参考

http://www.cnblogs.com/brucezhang80/p/4177913.html

源代码

点击打开链接

说明

debug模式下,把输出类型改为控制台应用程序,方便调试

release模式下,把输出类型改为Windows 应用程序

考虑到有时候服务停止时间很长。当测试页面HTTP无返回而服务并未在停止状态,直接杀死相应进程,而不是去等待服务停止。

 

posted @ 2020-08-14 08:34  2eggs  Views(365)  Comments(0Edit  收藏  举报