c#監聽tomcat服務
阿新 • • 發佈:2020-08-14
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無返回而服務並未在停止狀態,直接殺死相應程序,而不是去等待服務停止。