HOME導致的tomcat無法正常啟動問題

背景

在學習elasticsearch時為了方便進行數據查詢,使用了head插件

因為elasticsearch版本較高(6.3.0),沒有與版本相符的head插件,將以獨立web項目運行

所以提供了一個tomcat 單獨運行head web項目

在使用該tomcat時遇到了無法啟動問題

問題描述及初步解決

雙擊startup.bat腳本無任何反應,所以在cmd窗口去運行,結果發現如下錯誤信息:

CATALINA_HOME導致的tomcat無法正常啟動問題

翻譯為:

<code>CATALINA_HOME環境變量定義不正確
運行此程序需要此環境變量
複製代碼/<code>

遂查看系統環境變量,果然發現該環境變量:

CATALINA_HOME導致的tomcat無法正常啟動問題

刪除該變量後,tomcat得以正常啟動

那麼為啥會出現這個問題呢?

在經過面向百度編程之後,找到問題原因:tomcat的startup.bat腳本中有代碼如下:

CATALINA_HOME導致的tomcat無法正常啟動問題

雖然看不懂語法 但是大概意思可以理解:

​ 啟動時如果設置了CATALINA_HOME就會去對應的CATALINA_HOME下的bin目錄去找對應的腳本啟動tomcat

​ 如果沒找到就設置CATALINA_HOME為當前目錄 就會去執行當前路徑的bin目錄下的腳本(正常啟動)

然後在上面代碼的26行我找到了出錯原因:

​ 我係統變量中配置的目錄非tomcat根目錄而是bin目錄 根據26行的代碼可知 腳本啟動後它會去CATALINA_HOME下的bin目錄去找catalina.bat腳本執行 我的變量中配置的目錄為bin目錄所以報了CATALINA_HOME環境變量定義不正確

找到錯誤原因後我嘗試修改了CATALINA_HOME的環境變量 刪除了原本的bin 改為了tomcat7的根目錄

CATALINA_HOME導致的tomcat無法正常啟動問題

再次嘗試啟動tomcat8 發現本次可以正常啟動 但是啟動的tomcat卻是環境變量中配置的tomcat7

這證明了之前的猜測是正確的!進行最後一步測試

隨後刪除該成員變量後tomcat8正常啟動!

得出結論:

​ tomcat啟動時如果設置了系統變量CATALINA_HOME就會拼接路徑為:CATALINA_HOME\bin,然後去該路徑執行對應腳本

​ 如果沒有設置CATALINA_HOME,則會正常執行當前目錄的腳本

至此該問題解決!

終極解決方案

解決該問題的第二天(重啟電腦後),當我再次嘗試啟動tomcat8時,再次出現了第一次的問題,直接閃退,使用cmd啟動後發現了跟第一次一樣的問題:CATALINA_HOME環境變量定義不正確

再次去查看系統環境變量確認已經刪除了CATALINA_HOME環境變量

經過再次上網查詢後找到解決方案:

CATALINA_HOME導致的tomcat無法正常啟動問題

在tomcat8的startup.bat腳本中手動設置CATALINA_HOME為該tomcat的根目錄

最終測試結果可以正常執行 同時不影響tomcat7的正常執行

總結

由於tomcat啟動腳本的機制,所以建議刪除系統變量中的CATALINA_HOME,如果刪除了之後還是有某個tomcat出現CATALINA_HOME問題無法啟動,則可以給該tomcat手動設置CATALINA_HOME


分享到:


相關文章: