Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

Linux 定時重啟 Tomcat 實戰:crontab + 啟動/關閉腳本 自動化運維

編輯:關於 Linux

Tomcat 記憶體洩漏、執行緒卡死導致定期掛掉,臨時方案是「定時重啟」。本文完整演示 編寫關閉/啟動腳本 → 設定環境變數 → crontab 定時任務 → 日誌驗證 全流程,並補充生產環境優化建議 (GC 參數、JMX 監控、優雅關閉)。

tomcat_shutdown.sh 腳本

前置條件

  • Tomcat 安裝路徑:/home/oracle/apache-tomcat-7.0.29/
  • JDK 路徑:/home/oracle/jdk1.7.0_67/
  • 執行用戶:oracle (需有 Tomcat 目錄讀寫權限)

步驟 1:編寫關閉腳本 tomcat_shutdown.sh

#!/bin/bash
# 檔案:/home/oracle/scripts/tomcat_shutdown.sh

export JAVA_HOME=/home/oracle/jdk1.7.0_67/
export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH

echo "======== begin stop the tomcat ========"
/home/oracle/apache-tomcat-7.0.29/bin/shutdown.sh

# 等待進程結束,最多 30 秒
for i in {1..30}; do
    if ! pgrep -f "apache-tomcat-7.0.29" >/dev/null; then
        echo "Tomcat stopped gracefully."
        exit 0
    fi
    sleep 1
done

# 強制殺掉殘留進程
echo "Force killing remaining Tomcat processes..."
pkill -9 -f "apache-tomcat-7.0.29"
echo "Tomcat force stopped."

tomcat_startup.sh 腳本

步驟 2:編寫啟動腳本 tomcat_startup.sh

#!/bin/bash
# 檔案:/home/oracle/scripts/tomcat_startup.sh

export JAVA_HOME=/home/oracle/jdk1.7.0_67/
export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH

echo "======== begin start the tomcat ========"
/home/oracle/apache-tomcat-7.0.29/bin/startup.sh

# 簡單健康檢查:等待端口 8080 監聽
for i in {1..30}; do
    if netstat -tlnp 2>/dev/null | grep -q ":8080 "; then
        echo "Tomcat started successfully on port 8080."
        exit 0
    fi
    sleep 1
done

echo "ERROR: Tomcat failed to start within 30 seconds."
exit 1

腳本賦予執行權限

chmod +x /home/oracle/scripts/tomcat_shutdown.sh
chmod +x /home/oracle/scripts/tomcat_startup.sh

步驟 3:建立重啟腳本 tomcat_restart.sh (組合關閉+啟動)

#!/bin/bash
# 檔案:/home/oracle/scripts/tomcat_restart.sh

/home/oracle/scripts/tomcat_shutdown.sh
sleep 5
/home/oracle/scripts/tomcat_startup.sh

步驟 4:配置 crontab 定時任務

# 以 oracle 用戶編輯 crontab
crontab -e

# 每天凌晨 3:30 重啟 (業務低峰期)
30 3 * * * /home/oracle/scripts/tomcat_restart.sh >> /home/oracle/logs/tomcat_restart.log 2>&1

# 或每週一凌晨 4:00 重啟
0 4 * * 1 /home/oracle/scripts/tomcat_restart.sh >> /home/oracle/logs/tomcat_restart.log 2>&1

crontab -e 編輯介面

crontab 格式速查

* * * * *  執行指令
- - - - -
| | | └─ 星期 (0-7) (Sun=0 或 7)
| | └──── 月 (1-12)
| └────── 日 (1-31)
└──────── 時 (0-23)

步驟 5:驗證與日誌查看

# 查看 crontab 執行日誌 (系統層面)
grep CRON /var/log/syslog | tail -20

# 查看腳本自帶日誌
tail -f /home/oracle/logs/tomcat_restart.log

生產環境優化建議 (治本而非治標)

  1. JVM 參數調優:設定 -Xms -Xmx 相等、啟用 G1GC、配置 -XX:+HeapDumpOnOutOfMemoryError
  2. 優雅關閉:在 server.xml 設定 <Server port="8005" shutdown="SHUTDOWN">,腳本用 shutdown.sh 而非 kill -9
  3. JMX/Prometheus 監控:暴露 JMX 端口,接入 Grafana 告警 (Heap、Threads、GC、Request Latency)
  4. 日誌輪轉:logrotate 管理 catalina.out、localhost_access_log
  5. 多實例隔離:不同應用部署獨立 Tomcat,避免單點故障波及全站
  6. 容器化:遷移至 Docker + K8s,利用 Liveness/Readiness Probe 自動重啟

完成 腳本分離 → 環境變數固化 → crontab 定時 → 日誌留存 四步,即可建立可靠的 Tomcat 定時重啟機制,為排查根因爭取時間。記住:定時重啟是止痛藥,JVM 調優才是根治方案。

Copyright © Windows教程網 All Rights Reserved