2008-09-19 70 views
3

我們的項目使用Cruise Control來構建和熱部署Web應用程序到遠程服務器(通過FTP)以.war文件的形式運行Tomcat。不幸的是,「熱」部署似乎沒有正常工作,導致我們重新啓動Tomcat以響應每個部署。我們真的很喜歡這種自動神奇的做法,就像構建本身一樣。是否有捷徑可尋?有沒有簡單的方法讓Apache Tomcat在部署後自動重啓?

附註:兩臺機器都運行Windows(XP或服務器,我認爲)。

附註2:性能並不重要。這是一個整合框。

回答

1

如果你有定期的構建,你可以很容易地把東西在cron的這樣

crontab -e 

然後停止Tomcat在說凌晨1:30

30 1 * * * ./path_to_tamcat/bin/catalina.sh stop 

然後再次啓動2分鐘後來

32 1 * * * ./path_to_tamcat/bin/catalina.sh start 

授予這不是最適合不規則部署,但你可以輕鬆地h大規模部署與計劃重新啓動。

+0

啊,我應該提到遠程機器(和構建機器)是windows的盒子。 – 2008-09-19 20:30:28

+0

然後您可以通過任務管理器輕鬆設置調度程序到相同的東西,並抓住catalina.bat文件,我相信 – ethyreal 2008-09-19 20:35:11

+0

感謝您的建議。不幸的是,這是一個不規則的部署,因爲它是爲了響應通過SVN的用戶簽入而啓動的。 – 2008-09-20 00:48:57

0

這聽起來有點像我正在使用小Tomcat的部署管理器的東西。我基本上沒有這方面的經驗,只是你知道。這就是說,我在哪裏工作,我們使用兩個設置。

在server.xml文件中,上下文具有屬性reloadable =「true」

我們所要做的就是將WAR文件放在正確的位置,並且Tomcat解包並重新加載它,沒問題。

現在,當我看着它,在official configuration reference說:

「此功能的應用程序開發過程中非常有用,但它需要顯著運行時開銷,因此不建議對部署的生產應用。」

就像我說過的,我們從來沒有遇到過問題。我們的系統處理大量請求,我們似乎沒有問題。儘管我們從來沒有對這兩種配置進行基準測試。

您可能想試試看。至少你會知道,如果它足夠快樂,重新加載的東西完成這種方式。您也可以檢查性能,看看它是否對您有問題。

我應該注意的是,每隔一段時間,事情就不會正確,我們必須重新啓動Tomcat,但這種情況相對較少。

如果這樣做,你需要做的就是讓腳本在正確的位置複製WAR並監視以確保工作正常。在部署足夠多的Tomcat後,將耗盡permgen空間,因此您必須注意,您可能需要手動重啓Tomcat。

其他隨機猜測:

  1. 你直接FTP傳送到最終的WAR的位置?也許Tomcat只是試圖打開它太早?
  2. 您是否收到任何類型的錯誤訊息?也許這可以幫助你追蹤問題?
  3. 你有沒有嘗試其他版本的Tomcat(如果可用)?也許5.5沒有這個問題(如果你使用5.5,那麼是5.0)?也許只是一個新的點發布?
1

如果您查看bin目錄中的tomcat啓動和關閉.bat(或.sh)腳本,您將看到它們實際運行一個java進程來啓動tomcat或在關閉的情況下,到tomcats關閉端口 - 請參閱conf目錄中的server.xml。 您可以配置您的構建ant任務,以與腳本相同的方式調用tomcat jar。

0

你使用的是什麼版本的tomcat? 究竟發生了什麼使其看起來好像「熱」部署不起作用?

1

是tomcat註冊爲windows服務嗎?

如果是這樣,只需使用netstart和netstop編寫一個.bat腳本,並將被調用作爲部署過程的最後一步。

0

你沒有給太多細節的時候,爲什麼你的熱點展開時「工作不正常」,但如果它實際上已經引起了/WEB-INF/lib資源被鎖定(這是不是一種罕見的原因,你看這往往使用JavaMail API的mail.jar),則只需設置ContextantiResourceLocking屬性到true。下面是一個webapp的/META-INF/context.xml看起來如何的例子:

<Context antiResourceLocking="true"> 
    <!-- Your stuff here. --> 
</Context> 
相關問題