下面按 Tomcat 9/10/11 的通用佈局,凝練説明其目錄結構、用途與實戰要點(適用於二進制發行版與多實例部署)。📁
一、核心目錄一覽(邏輯分層)
- <span style="color:red">CATALINA\_HOME</span>:Tomcat 程序本體(只讀維護更安全)。
- <span style="color:red">CATALINA\_BASE</span>:具體實例配置與運行數據(可多實例複用同一 HOME)。
常見物理目錄(以 BASE 為主)
- <span style="color:red">bin</span>:啓動腳本(
startup.sh、catalina.sh、shutdown.sh等)。 - <span style="color:red">conf</span>:配置中心(
server.xml、web.xml、tomcat-users.xml、context.xml)。 - <span style="color:red">lib</span>:實例級公共依賴 JAR(優先級高於 webapp 的
WEB-INF/lib)。 - <span style="color:red">webapps</span>:應用部署目錄(WAR/解壓後的目錄)。
- <span style="color:red">logs</span>:日誌(
catalina.out、訪問日誌、應用日誌)。 - <span style="color:red">work</span>:JSP 編譯與臨時緩存。
- <span style="color:red">temp</span>:運行期臨時文件。
説明:在單實例默認安裝中,以上目錄常同時存在於 <span style="color:red">CATALINA\_HOME</span>;生產推薦拆分到 <span style="color:red">CATALINA\_BASE</span> 以實現多實例與更清晰的變更邊界。🧩
二、目錄—用途—關鍵文件速查表
| 目錄 | 主要用途 | 關鍵文件 | 運維要點 |
|---|---|---|---|
| <span style="color:red">bin</span> | 啓停與工具腳本 | catalina.sh/.bat |
支持 configtest 校驗配置;建議用 setenv.sh 注入 JVM 參數 |
| <span style="color:red">conf</span> | 全局與連接器配置 | <span style="color:red">server.xml</span>、<span style="color:red">web.xml</span>、context.xml、tomcat-users.xml |
端口、線程池、AJP/HTTP、虛擬主機、Realm 與角色賬户 |
| <span style="color:red">lib</span> | 實例級庫 | *.jar |
JDBC 驅動、統一日誌橋接等放此目錄 |
| <span style="color:red">webapps</span> | 應用部署 | ROOT/、app.war |
支持熱部署;也可用 conf/Catalina/localhost/*.xml 顯式 Context |
| <span style="color:red">logs</span> | 運行日誌 | catalina.*、localhost_access_log.* |
結合 accesslog 與日誌切割策略 |
| <span style="color:red">work</span> | JSP 編譯緩存 | Catalina/… |
清理可迫使 JSP 重新編譯 |
| <span style="color:red">temp</span> | 臨時文件 | — | 磁盤不足會致應用異常,需監控 |
三、快速查看目錄結構(Linux)
tree -L 2 "${CATALINA_BASE:-$CATALINA_HOME}"
解釋:使用 tree 按兩層深度展示 Tomcat 目錄;變量優先展示 <span style="color:red">CATALINA\_BASE</span>,若未設置則回退到 <span style="color:red">CATALINA\_HOME</span>。如未安裝 tree,可 apt/yum install tree 後再用。
find "${CATALINA_BASE:-$CATALINA_HOME}" -maxdepth 2 -type d | sort
解釋:在缺少 tree 的情況下,用 find 羅列兩層目錄結構,並排序便於閲讀。
四、標準多實例佈局(生產推薦)
export CATALINA_HOME=/opt/tomcat
export CATALINA_BASE=/srv/tomcat-app1
mkdir -p $CATALINA_BASE/{conf,logs,temp,webapps,work}
cp $CATALINA_HOME/conf/{server.xml,web.xml,tomcat-users.xml,context.xml} $CATALINA_BASE/conf/
$CATALINA_HOME/bin/catalina.sh configtest
$CATALINA_HOME/bin/startup.sh
解釋:
- 前兩行:設置程序本體與實例根路徑,隔離“代碼/配置”。
mkdir -p …:創建實例所需的運行目錄。cp conf/*:複製基線配置到實例,避免改動 HOME。configtest:在啓動前校驗 <span style="color:red">server.xml</span> 等是否正確。startup.sh:按當前 <span style="color:red">CATALINA\_BASE</span> 啓動該實例。🚀
五、部署與診斷常用命令
# 1) 部署 WAR(熱部署)
cp app.war $CATALINA_BASE/webapps/
# 2) 顯式上下文部署(免拷貝 WAR)
cat > $CATALINA_BASE/conf/Catalina/localhost/app.xml <<'XML'
<Context docBase="/data/apps/app" path="/app" reloadable="false"/>
XML
# 3) 平滑關閉
$CATALINA_HOME/bin/shutdown.sh
# 4) 查看實時日誌
tail -f $CATALINA_BASE/logs/catalina.out
解釋:
- 1)將
app.war放入 <span style="color:red">webapps</span> 即可自動解壓與加載。 - 2)使用 Context 文件把外部目錄映射為應用,適合 CI/CD 中“指向目錄”的零拷貝發佈。
- 3)
shutdown.sh發送關閉信號,實現優雅退出。 - 4)
tail -f動態查看啓動與報錯信息,定位端口/類庫衝突等問題。🔍
六、思維導圖(vditor/mermaid)
七、關鍵實踐要點
- 將“程序”與“實例”分離(<span style="color:red">CATALINA\_HOME</span> / <span style="color:red">CATALINA\_BASE</span>),統一補丁、獨立故障域。
- 連接器配置與線程池均在 <span style="color:red">server.xml</span>;安全基線在 <span style="color:red">web.xml</span>/<span style="color:red">context.xml</span>。
- 公共 JDBC 驅動放 <span style="color:red">lib</span>;應用內私有依賴放
WEB-INF/lib,避免衝突。 - 定期清理 <span style="color:red">work</span> 與監控 <span style="color:red">temp</span>、<span style="color:red">logs</span> 的磁盤佔用。📊
按以上結構與命令,即可快速識別並掌控 Tomcat 的目錄體系,支持多實例與穩定上線。