2013-05-04 81 views
2

我寫了一個bash腳本來自動部署一個web應用程序到tomcat容器,只要它被觸發。這是很直接:自動檢測tomcat失敗啓動bash腳本

  1. 轉儲備份當前數據庫
  2. 關閉當前Tomcat進程
  3. 刪除Web應用程序文件夾
  4. 用新的
  5. 更換戰爭文件
  6. 再次啓動tomcat

但是,現在我想要一個後退。如果在啓動過程中出現問題,數據庫將恢復並重新部署舊的war文件。

我的問題是,我不知道何時web應用程序啓動失敗。我的一個實現是我會檢查我的Web應用程序的日誌文件的大小,如果過了一段時間它不會增加(這意味着沒有任何東西被寫入),那麼系統應該明白部署失敗了,我們應該恢復舊的Web應用程序。然而,這是一種很骯髒,我不知道如果我的日誌記錄文件在那時正確滾動會發生什麼。

tomcat是否有任何支持Web應用程序啓動失敗檢測的機制?

+1

檢查http://tomcat.apache.org/tomcat-7.0-doc/manager-howto.html#List_Currently_Deployed_Applications – home 2013-05-04 09:56:52

+0

@home:感謝您的關注,但我想檢查部署的成功與否服務器機器,而不是通過網絡訪問。有什麼辦法可以在服務器上下文中檢索相同的信息,或者我真的需要用curl來獲取它? – 2013-05-04 10:06:57

+1

AFAIK,服務器(OS +硬件)不知道應用程序狀態,因爲您的應用程序只是運行Tomcat的JVM實例的一部分以及您的應用程序(只是一個Java進程)。另一種方法是在你的應用程序中實現某種「探測」servlet。這使您不僅可以測試技術'活着'狀態(例如數據庫可用性)。 – home 2013-05-04 10:25:33

回答

1

你看過Tomcat附帶的Manager嗎?它爲您提供了一個API,可以輕鬆確定部署在其中的Web應用程序的狀態。

+0

是http://tomcat.apache.org/tomcat-7.0-doc/manager-howto.html#List_Currently_Deployed_Applications? – 2013-05-04 10:08:26

+0

通過這種方式,似乎我需要蜷縮我的域名才能得到結果?有沒有地方的方式?在我的bash腳本中,我可以訪問服務器上的所有文件(包括tomcat容器)。我們真的需要去捲曲的方式嗎? – 2013-05-04 10:10:47

+0

訪問API並讓tomcat告訴你應用程序的狀態可能是最穩健的方式。讓你的bash腳本檢查某些本地文件的存在或狀態有點脆弱 - 如果在隨後的tomcat版本中文件的位置發生變化,會發生什麼? – seedhead 2013-05-04 10:46:06