zoukankan      html  css  js  c++  java
  • 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.30instartup.bat

    2.stop.bat

    1 K:apache-tomcat-6.0.30inshutdown.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无返回而服务并未在停止状态,直接杀死相应进程,而不是去等待服务停止。

  • 相关阅读:
    cookie行为试验(一)
    指针内容的引用
    多线程协同
    xss攻击
    _com_error e
    操作符重载
    c++对象中的成员变量地址分布
    常对象指针
    COM调用2
    cookie行为试验(二)
  • 原文地址:https://www.cnblogs.com/2eggs/p/13500161.html
Copyright © 2011-2022 走看看