centos環境啟動/重啟java服務腳本優化

centos環境啟動/重啟java服務腳本優化

  • 部分命令說明
    • 根據端口查詢服務進程
    • 殺死進程
    • 函數腳本接收參數
  • 腳本
  • 注意
    • 重啟
    • 文檔位置
    • 異常

在離線環境部署的多個java應用組成的系統,測試階段需要較為頻繁的發布,因資源限制,沒有弄devops或CICD那套,就簡單的打包成jar進行發布。之前弄了腳本進行啟動,啟動前需要根據端口收到的殺掉進程再啟動,否則會出現端口沖突導致啟動失敗,優化點之一就是要支持腳本自動重啟,自動找到對應的進程再殺死重啟。另外一點就是日志文件,重啟后會根據服務名和當前時間生成新的日志文件,查詢日志的時候如果有多個前綴的文件時,需要手動選擇,比較麻煩,就想著將歷史日志文件歸檔到當前路徑下的backup文件夾中。

部分命令說明

首先聲明本人shell菜鳥,對這塊兒使用很少。

根據端口查詢服務進程

這個我比較喜歡使用lsof命令,比如查詢8080端口占用的進程可以使用一下命令

lsof -i:8080

殺死進程

這個應該都懂,kill -9,不要簡單使用kill,比如殺死進程PID為12345的進程

kill -9 12345

函數腳本接收參數

這個比較簡單命令,函數的參數依此使用$1,$2,$3…進行接收

腳本

因為是多個java服務,同時也秉承復用的思想,想著寫個通用的方法進行服務的重啟,再寫多個服務對應的腳本記錄好各自的服務名和端口等信息,在服務各自的腳本中傳參調用通用的服務啟動或重啟方法。

通用服務啟動或重啟腳本 run.sh

#!/bin/bashstart_app(){# 接收參數APP_NAME=$1;APP_PORT=$2;MEM=$3ACTION=$4;CURRENT_TIME=`date +"%Y%m%d%H%M%S"`#檢查程序是否在運行APP_STATUS=`netstat -nlt|grep ${APP_PORT} |wc -l`;RUNNING_PID=$(netstat -nlp | grep :$APP_PORT | awk '{print $7}' | awk -F"/" '{ print $1 }');LOG_FILE=./logs/${APP_NAME}_${CURRENT_TIME}.log;cd ..;if [ "${APP_STATUS}" -eq 1 ]; thenif [ "${ACTION}"x == "restart"x ]; then## 重啟前先kill原進程echo "kill the running app whose PID is ${RUNNING_PID} of ${APP_NAME}";kill -9 "${RUNNING_PID}";# 日志歸檔cd logs;for file in `ls ${APP_NAME}* -a`;domv "${file}" backup/;donecd ..;elseecho "exist running ${APP_NAME} and the PID is ${RUNNING_PID}";exit 0;fifiecho "start ${APP_NAME} at $CURRENT_TIME";## 啟動程序nohup java -Xms${MEM}m -Xmx${MEM}m -XX:PermSize=256m -XX:MaxPermSize=512m -jar -Dfile.encoding=utf-8 -Dserver.port=${APP_PORT}  -Dspring.profiles.active=prod ${APP_NAME}  > ${LOG_FILE} 2>&1 &pid=`ps -ef|grep java|grep ${APP_NAME}`echo "${APP_NAME} has started successfully at ${CURRENT_TIME},and the pid is ${pid}"
}

單個的服務啟動腳本

#!/bin/bash
action=$1
## 引入通用服務啟動腳本
source ./run.sh
#啟動方法
start(){# 執行通用服務腳本中的啟動方法start_app xxx.jar 8080 4096 ${action}
}#程序主入口
start

注意

重啟

直接執行服務啟動腳本不傳參數的情況,會判斷服務端口是否占用,占用則直接退出,傳restart則會在服務啟動的情況下先殺死原服務進程再重新啟動。

文檔位置

jar包位于/opt/app目錄下,腳本位于/opt/app/run目錄下,日志放在了/opt/app/logs目錄下,目前這個版本只能支持在腳本當前目錄執行,如果使用絕對路徑的方式會報錯,應該是腳本中的一些寫法沒有使用絕對路徑所致,各有利弊,暫時保留此方案。

異常

測試過程中遇到了run.sh: xxx行 $'\r' 附近有語法錯誤的錯誤,使用sed -i ‘s/\r$//’ run.sh命令轉換就行了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/45204.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/45204.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/45204.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

華為手機聯系人不見了怎么恢復?3個解決方案

華為手機聯系人列表就像是我們精心編織的社交網絡之網。然而,有時,這張網可能會因為各種原因而意外破損,聯系人信息消失得無影無蹤,讓我們陷入“人脈孤島”的困境。華為手機聯系人不見了怎么恢復?別擔心,我…

構建高質量數據集與智能數據工程平臺:播客AI Odyssey深度對話實錄

對話整數智能聯創和前IDEA研究員:構建高質量數據集與智能數據工程平臺 - AI Odyssey | 小宇宙 - 聽播客,上小宇宙 人工智能技術的日益深遠發展,對人工智能的性能提升與技術迭代提出了新的要求。在大模型訓練中,已有的研究和實踐表…

【操作系統】進程管理——用信號量機制解決問題,以生產者-消費者問題為例(個人筆記)

學習日期:2024.7.10 內容摘要:利用信號量機制解決幾個經典問題模型 目錄 引言 問題模型 生產者-消費者問題(經典) 多生產者-多消費者問題 吸煙者問題 讀者寫者問題(難點) 哲學家進餐問題&#xff0…

解決POST請求中文亂碼問題

解決POST請求中文亂碼問題 1、亂碼原因2、解決方法3、具體步驟 💖The Begin💖點點關注,收藏不迷路💖 在Web開發中,處理POST請求時經常遇到中文亂碼問題,這主要是由于服務器在接收到POST請求的數據后&#x…

物聯網時代的等保測評:保障萬物互聯的安全

隨著物聯網(IoT)技術的飛速發展,我們的生活正逐漸進入一個萬物互聯的新時代。從智能家居到智慧城市,從無人駕駛到農業物聯網,IoT技術正在滲透到我們生活的方方面面。然而,隨著IoT設備數量的激增&#xff0c…

BUG解決:postman可以請求成功,但Python requests請求報403

目錄 問題背景 問題定位 問題解決 問題背景 使用Python的requests庫對接物聯數據的接口之前一直正常運行,昨天突然請求不通了,通過進一步驗證發現凡是使用代碼調用接口就不通,而使用postman就能調通,請求參數啥的都沒變。 接口…

SSL 證書錯誤:如何修復以及錯誤發生的原因

SSL證書可以提升網站的可信度。然而,如果您的SSL證書出現錯誤,您可能會得到一個“不安全”的標簽,這可能會導致訪問者失去對您網站的信任并轉向競爭對手。 本文將介紹SSL證書錯誤的原因及其對用戶的潛在影響。隨后,我們將提供詳細…

MybatisPlus 核心功能

MybatisPlus 核心功能 文章目錄 MybatisPlus 核心功能1. 條件構造器1.1 QueryWrapper1.2 LambdaQueryWrapper(推薦)1.3 UpdateWrapper1.4 LambdaUpdateWrapper 2. 自定義SQL3. Service接口 1. 條件構造器 當涉及到查詢或修改語句時,MybatisP…

界面組件Kendo UI for React 2024 Q2亮點 - 生成式AI集成、設計系統增強

隨著最新的2024年第二季度發布,Kendo UI for React為應用程序開發設定了標準,包括生成式AI集成、增強的設計系統功能和可訪問的數據可視化。新的2024年第二季度版本為應用程序界面提供了人工智能(AI)提示,從設計到代碼的生產力增強、可訪問性…

Java畢業設計 基于SSM vue圖書管理系統小程序 微信小程序

Java畢業設計 基于SSM vue圖書管理系統小程序 微信小程序 SSM 圖書管理系統小程序 功能介紹 用戶 登錄 注冊 首頁 圖片輪播 圖書信息推薦 圖書詳情 贊 踩 評論 收藏 系統公告 公告詳情 用戶信息修改 我的待還 圖書歸還 催還提醒 我的收藏管理 意見反饋 管理員 登錄 個人中心…

絕地求生PUBG奇幻大亂斗怎么玩 奇幻大亂斗什么時候回歸

《絕地求生》(PUBG) 是由韓國開發的一款戰術競技型射擊類沙盒游戲,游戲中我們需要和隊友組隊乘坐飛機跳傘到達一座空島,之后我們需要搜索一切我們可以用到的物資,之后我們于敵人進行對戰,期間不斷躲避毒圈的追擊,最后當…

python(餐廳點餐系統)

全部代碼: meau_lis[[1,"牛排",50],[2,"羊排",80],[3,"大盤雞",50],[4,"火鍋雞",68],[5,"豬大骨",35],[6,"米飯",2],[7,"壽司",5],[8,"大餅",6],[9,"小米粥",1],[10,&…

深入理解MySQL中的EXPLAIN及type列

在MySQL中,EXPLAIN是一個強大的工具,它可以幫助我們理解SQL查詢的執行計劃。通過使用EXPLAIN,我們可以獲取到查詢的詳細信息,包括如何執行查詢,以及查詢的各個部分如何連接在一起。在本篇博客中,我們將重點…

Redis+Caffeine 實現兩級緩存實戰

RedisCaffeine 實現兩級緩存 背景 ? 事情的開始是這樣的,前段時間接了個需求,給公司的商城官網提供一個查詢預計送達時間的接口。接口很簡單,根據請求傳的城市倉庫發貨時間查詢快遞的預計送達時間。因為商城下單就會調用這個接口&#xff…

防火墻安全策略及用戶認證實驗

目錄 一、實驗拓撲 二、實驗要求 三、實驗思路 四、實驗配置 1、配置vlan 2、配置路由器、防火墻IP地址,劃分區域 3、配置安全策略 ?策略一: 策略二: 策略三: 4、配置用戶認證 策略一: 策略二&#xff1a…

視覺SLAM與定位之一前端特征點及匹配

視覺SLAM中的特征點及匹配 參考文章或鏈接特征點性能的評估傳統特征點和描述子(僅特征點或者特征點描述子)傳統描述子 基于深度學習的特征點基于深度學習的描述子基于深度學習的特征點描述子特征匹配 參考文章或鏈接 Image Matching from Handcrafted t…

WebGIS基礎原理

該部分內容與部分插圖、學習框架的主要參考的網站與博主如下(也趁機分享給大家): OSGeo開源WebGIS在線教程:http://webgis.cn/ OSGeo《地理信息系統原理》:https://www.osgeo.cn/gis-tutorial/index.html OSGeo《Pyth…

DSC主備歸檔報錯

先看一個報錯: 2024-07-10 22:12:21.725 [ERROR] database P0000003511 T0000000000000003696 rafil_list_overlap_consecutive_check failed, rfil(DMDATA/data/DSC02/arch/ARCHIVE_LOCAL1_0x57843343_EP1_2024-07-10_20-44-40.log)->next_seq(2901) > nex…

mysql 8.0.37 客戶端在centos7安裝順序

8.0.37安裝客戶端順序為 yum localinstall mysql-community-libs-compat-8.0.37-1.el7.x86_64.rpm #第二步要加 --nodeps --force 參數 rpm -ivh mysql-community-libs-8.0.37-1.el7.x86_64.rpm --nodeps --force rpm -ivh mysql-community-client-plugins-8.0.37-1.el7.x8…

如何用CSS3畫一個三角形?

要用 CSS3 畫一個三角形,可以利用元素的邊框和透明邊框的特性來實現。以下是一個簡單的示例代碼: .triangle {width: 0;height: 0;border-left: 50px solid transparent; /* 左邊框為透明,控制三角形的左斜邊 */border-right: 50px solid tr…