2011-11-02 51 views
0

我最近在Amazon EC2上部署了一個Grails應用程序。我使用MySQL和Tomcat(以及其他)。殺死Tomcat中的deamon線程的方法,應用程序無法啓動 - 你如何解決這個問題?

由於這僅僅是爲了測試的目的,我想要體驗「糟糕」的情況,所以我從應用程序仍在運行的應用程序中刪除我的應用程序文件夾等等。

當我最終刪除了我的應用程序的所有痕跡時,我嘗試通過在web-apps文件夾中放置新的war文件來部署它的新版本。

該應用程序將無法啓動,由於8080已經綁定了例外,閱讀一些博客,我遇到了一個解釋了這個問題後:守護線程...

現在我用的是:

pkill java 

這就是訣竅,我的問題是你們如何處理這種情況?

+0

在殺死進程之前,您是否嘗試過使用'sudo tomcat6 stop'? –

+0

是的,我嘗試過。事情是,我試圖搞砸,把自己置於一個糟糕的境地,這是一個實驗。我在這裏尋找的是其他人如何解決它。 – marko

回答

0

如果你試圖檢測Tomcat何時死亡,確保它真正停止(即不再運行),然後重新啓動過程,那麼最好的辦法就是進行某種心跳過程。你可以編寫一個shell腳本在Tomcat的相同框上運行,定期向特定的URL發出一個web請求。如果它達到預期值,那麼一切都很好,但如果沒有,那麼它會發出kill命令,等待並重新啓動 - 或者向您發送電子郵件,執行其他操作等。您要確保此過程不是Tomcat出於上述原因啓動了一個守護進程線程(它們在某些情況下保持運行)。相反,我將它設置爲腳本,每分鐘運行一次cron作業。

當然,如果您在AWS EC2上運行,最好有一個小實例爲您進行監控。當它檢測到Tomcat服務器已經死亡時,它會殺死整個EC2實例並啓動一個新的服務器來替換它。 AWS提供了命令行工具,您可以在腳本中使用這些工具來實現此類管理。這可能是一個更好的解決方案,因爲這時你就開始了一個乾淨的平板,所以當你將EBS卷或機器映像與服務器的初始映像相關聯時,所有修改(如文件被擦除)都將被恢復。上面的方法(在同一臺服務器上運行腳本)無法輕鬆檢測並修復丟失的文件或其他更改,從而使事情擺在首位。

相關問題