Tomcat 使用 sh 腳本升級 雖然手動升級也不慢,但是手上的 java 專案越來越多,tomcat 版本每一段時間就會被抓出漏洞,一定要升級,為了要無痛升級,寫了個 sh ``` #!/bin/bash # 設定好 tomcat 版本號宇下載的連結 TOMCAT_VERSION="9.0.80" TOMCAT_DOWNLOAD_URL="https://downloads.apache.org/tomcat/tomcat-9/v${TOMCAT_VERSION}/bin/apache-tomcat-${TOMCAT_VERSION}.zip" # 備份原本的 tomcat 資料夾到使用者桌面 BACKUP_DIR="${HOME}/Desktop/tomcat_backup" # tomcat 安裝資料路徑 TOMCAT_DIR="/opt/tomcat" if [ -d "$TOMCAT_DIR" ]; then echo "備份原本的 tomcat 資料夾到 ${BACKUP_DIR}" mkdir -p "$BACKUP_DIR" cp -r "$TOMCAT_DIR"/* "$BACKUP_DIR" fi # 下載並解壓縮指定的 tomcat echo "下載並解壓縮指定的 tomcat ${TOMCAT_VERSION}" TMP_DIR=$(mktemp -d) wget "$TOMCAT_DOWNLOAD_URL" -O "${TMP_DIR}/tomcat.zip" unzip -q "${TMP_DIR}/tomcat.zip" -d "${TMP_DIR}" # 停止服務,並刪除原本的 tomcat echo "停止服務,並刪除原本的 tomcat " sudo systemctl stop tomcat sudo rm -rf "$TOMCAT_DIR" # 將 tomcat 移動到 opt 資料夾 echo "將 tomcat 移動到 ${TOMCAT_DIR}" sudo mv "${TMP_DIR}/apache-tomcat-${TOMCAT_VERSION}" "$TOMCAT_DIR" # 複製 war 檔到 webapps 資料夾 echo "複製 war 檔到 webapps 資料夾" WAR_FILES_DIR="${BACKUP_DIR}/webapps" if [ -d "$WAR_FILES_DIR" ]; then cp "$WAR_FILES_DIR"/*.war "${TOMCAT_DIR}/webapps/" fi # 修改server.xml中的HTTP port 為 80 echo "修改server.xml中的HTTP port 為 80" sudo sed -i 's/8080/80/g' "${TOMCAT_DIR}/conf/server.xml" # 在 web.xml 中註解指定的部分 sed -i '/<welcome-file-list>/,/<\/welcome-file-list>/ s/^/<!--/' /opt/tomcat/conf/web.xml sed -i '/<welcome-file-list>/,/<\/welcome-file-list>/ s/$/-->/' /opt/tomcat/conf/web.xml # 設定 tomcat 資料夾所有權與權限 echo "設定 tomcat 資料夾所有權與權限" sudo chown -R tomcat:tomcat "$TOMCAT_DIR" sudo chmod -R 770 "${TOMCAT_DIR}/work" "${TOMCAT_DIR}/conf" "${TOMCAT_DIR}/webapps" "${TOMCAT_DIR}/logs" sudo chmod +x "${TOMCAT_DIR}/bin/startup.sh" "${TOMCAT_DIR}/bin/shutdown.sh" "${TOMCAT_DIR}/bin/catalina.sh" # 增加一旦出現 Error, Tomcat 版本號也不會出現的設定 if [ ! -f "${TOMCAT_DIR}/lib/org/apache/catalina/util/ServerInfo.properties" ]; then sudo -u tomcat mkdir -p "${TOMCAT_DIR}/lib/org/apache/catalina/util" echo 'server.info=Apache Tomcat' | sudo -u tomcat tee "${TOMCAT_DIR}/lib/org/apache/catalina/util/ServerInfo.properties" > /dev/null echo "ServerInfo.properties created." else echo "ServerInfo.properties already exists." fi # 啟動安裝好的 tomcat echo "啟動安裝好的 tomcat" #"${TOMCAT_DIR}/bin/startup.sh" sudo systemctl start tomcat # 清理臨時資料夾 rm -rf "$TMP_DIR" echo "Tomcat 升級完成!" ``` 我將以上內容,存在 ~/Desktop/upgrade_tomcat.sh 為了能成功執行,要將該檔案的權限設定為可執行。 ``` sudo chmod +x upgrade_tomcat.sh ``` 接著就是執行該檔案了 ``` sh upgrade_tomcat.sh ``` 沒意外的話,會顯示以下訊息 ``` 備份原本的 tomcat 資料夾到 /home/vm/center61/Desktop/tomcat_backup 下載並解壓縮指定的 tomcat 9.0.80 --2023-09-06 11:54:24-- https://downloads.apache.org/tomcat/tomcat-9/v9.0.80/bin/apache-tomcat-9.0.80.zip 正在查找主機 downloads.apache.org (downloads.apache.org)... 88.99.95.219, 135.181.214.104, 2a01:4f9:3a:2c57::2, ... 正在連接 downloads.apache.org (downloads.apache.org)|88.99.95.219|:443... 連上了。 已送出 HTTP 要求,正在等候回應... 200 OK 長度: 12236278 (12M) [application/zip] Saving to: ‘/tmp/tmp.UDB0uVbzzO/tomcat.zip’ 100%[==================================================================================================>] 12,236,278 4.47MB/s in 2.6s 2023-09-06 11:54:28 (4.47 MB/s) - ‘/tmp/tmp.UDB0uVbzzO/tomcat.zip’ saved [12236278/12236278] 停止服務,並刪除原本的 tomcat 將 tomcat 移動到 /opt/tomcat 複製 war 檔到 webapps 資料夾 修改server.xml中的HTTP port 為 80 設定 tomcat 資料夾所有權與權限 啟動安裝好的 tomcat Tomcat 升級完成! ``` 如果有錯誤訊息,就要想辦法處理囉,以上。