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

CentOS Linux 服務自啟動腳本編寫規範與 Tomcat 實戰範例

編輯:Linux 教學

SysV init 風格的服務自啟動腳本本質是 Shell 腳本,遵循固定結構與 chkconfig 識別規範。以 Tomcat 為例,詳細講解腳本三大區塊、關鍵變量、case 分支結構與部署步驟。

腳本結構三區塊

#!/bin/bash
# 
# tomcat startup script for the Tomcat server
# 
# chkconfig: 345 80 20
# description: start the tomcat daemon
# 
# Source function library
. /etc/rc.d/init.d/functions

prog=tomcat
JAVA_HOME=/usr/java/jdk1.6.0_27
export JAVA_HOME
CATALINA_HOME=/usr/local/tomcat
export CATALINA_HOME

case "$1" in
  start)
    echo "Starting Tomcat..."
    $CATALINA_HOME/bin/startup.sh
    ;;
  stop)
    echo "Stopping Tomcat..."
    $CATALINA_HOME/bin/shutdown.sh
    ;;
  restart)
    echo "Stopping Tomcat..."
    $CATALINA_HOME/bin/shutdown.sh
    sleep 2
    echo
    echo "Starting Tomcat..."
    $CATALINA_HOME/bin/startup.sh
    ;;
  *)
    echo "Usage: $prog {start|stop|restart}"
    ;;
esac
exit 0

區塊詳解

第一區塊:宣告與註釋

  • #!/bin/bash:指定解釋器。
  • # chkconfig: 345 80 20:必須行,chkconfig 識別依據。
    345:運行級別 3/4/5 啟動
    80:啟動優先級 (S80)
    20:停止優先級 (K20)
  • . /etc/rc.d/init.d/functions:當前 Shell 載入函數庫(而非子 Shell),提供 daemon、killproc、success/failure 等通用函數。

第二區塊:變量定義

  • prog=tomcat:腳本名稱,用於 usage 提示。
  • JAVA_HOME、CATALINA_HOME:關鍵路徑,export 導出使子進程可見。

第三區塊:case 分支處理

  • $1:第一個位置參數(start/stop/restart)。
  • 每個分支以 ;; 結束,* 兜底顯示用法。
  • sleep 2:重啟時等待進程完全停止。
  • exit 0:正常退出碼。

部署與驗證

# 1. 建立腳本
vim /etc/init.d/tomcat
# 貼入內容,修改路徑匹配實際環境

# 2. 賦予執行權限
chmod +x /etc/init.d/tomcat

# 3. 註冊到 chkconfig
chkconfig --add tomcat
chkconfig --level 345 tomcat on

# 4. 測試
service tomcat start
service tomcat status
service tomcat stop
service tomcat restart

常見問題與避坑

systemd 時代的替代方案

CentOS 7+ 推薦編寫 /etc/systemd/system/tomcat.service Unit 文件:

[Unit]
Description=Apache Tomcat
After=network.target

[Service]
Type=forking
Environment=JAVA_HOME=/usr/java/jdk1.8.0
Environment=CATALINA_HOME=/usr/local/tomcat
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
PIDFile=/usr/local/tomcat/tomcat.pid

[Install]
WantedBy=multi-user.target

然後 systemctl daemon-reload && systemctl enable --now tomcat。
掌握 SysV init 腳本規範,既能維護舊系統,也能理解 systemd Unit 的對應關係。

Copyright © Windows教程網 All Rights Reserved
現象原因解決
chkconfig --add 報錯缺少 chkconfig 識別行確保腳本前部有 # chkconfig: 345 80 20
service tomcat start 無反應路徑變量錯誤或 startup.sh 無執行權限用 bash -x /etc/init.d/tomcat start 調試
重啟後端口仍被佔用shutdown.sh 未完全停止進程增加 sleep 或在 stop 分支加 kill -9 強制清理
開機不自啟運行級別不匹配或 chkconfig 未生效chkconfig --list tomcat 確認 345 為 on