tomcat_redeploy.sh#!/bin/bash
# ===== 變數區 =====
WEBAPP_DIR="/usr/share/tomcat7/webapps"
WAR_FILE="ROOT.war"
BACKUP_WAR="ROOT.war.bak.$(date +%F_%H%M%S)"
TOMCAT_BIN="/usr/share/tomcat7/bin"
LOG_FILE="${TOMCAT_BIN}/../logs/catalina.out"
# ===== 1. 優雅關閉 Tomcat =====
echo "Stopping Tomcat..."
"${TOMCAT_BIN}/shutdown.sh"
sleep 5
# 強制終止殘留進程
PIDS=$(ps aux | grep '[o]rg.apache.catalina.startup.Bootstrap' | awk '{print $2}')
if [ -n "$PIDS" ]; then
echo "Force killing residual PIDs: $PIDS"
kill -9 $PIDS
fi
# ===== 2. 清理舊部署與日誌 =====
echo "Cleaning old deployment..."
rm -rf "${WEBAPP_DIR}/ROOT"
rm -f "${WEBAPP_DIR}/${WAR_FILE}"
rm -f "${LOG_FILE}"
# ===== 3. 部署新 WAR =====
if [ -f "${WAR_FILE}" ]; then
echo "Deploying ${WAR_FILE}..."
cp "${WAR_FILE}" "${WEBAPP_DIR}/${WAR_FILE}"
else
echo "ERROR: ${WAR_FILE} not found in current directory!" >&2
exit 1
fi
# ===== 4. 啟動 Tomcat =====
echo "Starting Tomcat..."
"${TOMCAT_BIN}/startup.sh"
sleep 10
# ===== 5. 驗證啟動狀態 =====
if ps aux | grep -q '[o]rg.apache.catalina.startup.Bootstrap'; then
echo "Tomcat restarted successfully."
else
echo "WARNING: Tomcat may have failed to start. Check logs."
fi
ROOT.war 放在同一目錄chmod +x tomcat_redeploy.sh./tomcat_redeploy.shps aux | grep '[o]rg.apache.catalina... 避免 grep 自身進程sleep 等待進程終止/啟動生產環境建議將 Tomcat 註冊為 systemd 服務(/etc/systemd/system/tomcat.service),由系統管理生命週期,腳本僅負責部署邏輯。