CentOS 6.5 上配置 Tomcat 開機自啟動,將 `startup.sh` 或 `catalina.sh start` 直接加入 `/etc/rc.local`,重啟後 Tomcat 未啟動。
`rc.local` 執行環境**極度精簡**:無 `JAVA_HOME`、`PATH`、`CLASSPATH`、`CATALINA_HOME` 等關鍵環境變數,導致啟動腳本找不到 java、tomcat 相關類庫而靜默失敗。
vim /usr/local/apache-tomcat-7.0.53/bin/auto-startup.sh
內容:
#!/bin/bash export JAVA_HOME=/usr/local/jdk1.7.0_51 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export CATALINA_HOME=/usr/local/apache-tomcat-7.0.53 $CATALINA_HOME/bin/catalina.sh start
chmod +x /usr/local/apache-tomcat-7.0.53/bin/auto-startup.sh echo "/usr/local/apache-tomcat-7.0.53/bin/auto-startup.sh" >> /etc/rc.local
reboot ps -ef | grep tomcat # 應看到 Bootstrap start 進程
# /etc/systemd/system/tomcat.service [Unit] Description=Apache Tomcat After=network.target [Service] Type=forking Environment=JAVA_HOME=/usr/local/jdk1.8.0_202 Environment=CATALINA_HOME=/usr/local/apache-tomcat-8.5.50 Environment=CATALINA_BASE=/usr/local/apache-tomcat-8.5.50 ExecStart=$CATALINA_HOME/bin/startup.sh ExecStop=$CATALINA_HOME/bin/shutdown.sh User=tomcat Group=tomcat [Install] WantedBy=multi-user.target
systemctl daemon-reload systemctl enable tomcat systemctl start tomcat
開機自啟動失敗 90% 是環境變數缺失。將完整環境封裝在啟動腳本或 systemd Unit 中,是穩健部署的關鍵。