日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

shell监控java接口服务_Linux系统下Java通过shell脚本监控重启服务

發布時間:2023/11/27 生活经验 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 shell监控java接口服务_Linux系统下Java通过shell脚本监控重启服务 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡介

最近運維人員提出需求,增加一個運維頁面, 查詢當前的業務進程信息包括:進程名稱、啟動命令、啟動時間、運行時間等,可以通過頁面點擊重啟按鈕,可以重啟后端的一系列系統進程。

思路

java程序獲取linux進程信息可以通過shell腳本獲取進程信息、通過讀取proc文件系統獲取進程信息。 但是為了系統的安全性、方便維護等角度出發,更多的是java通過shell獲取和linux交互能力。

java程序中要執行linux命令主要依賴2個類:Process和Runtime:

Process:

ProcessBuilder.start() 和 Runtime.exec 方法創建一個本機進程,并返回 Process 子類的一個實例, 該實例可用來控制進程并獲得相關信息。Process 類提供了執行從進程輸入、執行輸出到進程、等待進程完成、 檢查進程的退出狀態以及銷毀(殺掉)進程的方法。 創建進程的方法可能無法針對某些本機平臺上的特定進程很好地工作,比如,本機窗口進程,守護進程,Microsoft Windows 上的 Win16/DOS 進程,或者 shell 腳本。創建的子進程沒有自己的終端或控制臺。它的所有標準 io(即 stdin、stdout 和 stderr) 操作都將通過三個流 (getOutputStream()、getInputStream() 和 getErrorStream()) 重定向到父進程。 父進程使用這些流來提供到子進程的輸入和獲得從子進程的輸出。因為有些本機平臺僅針對標準輸入和輸出流提供有限的緩沖區大小, 如果讀寫子進程的輸出流或輸入流迅速出現失敗,則可能導致子進程阻塞,甚至產生死鎖。 當沒有 Process 對象的更多引用時,不是刪掉子進程,而是繼續異步執行子進程。 對于帶有 Process 對象的 Java 進程,沒有必要異步或并發執行由 Process 對象表示的進程。

特別需要注意的是:

1,創建的子進程沒有自己的終端控制臺,所有標注操作都會通過三個流

(getOutputStream()、getInputStream() 和 getErrorStream()) 重定向到父進程(父進程可通過這些流判斷子進程的執行情況)

2,因為有些本機平臺僅針對標準輸入和輸出流提供有限的緩沖區大小,如果讀寫子進程的輸出流或輸入流迅速出現失敗,

則可能導致子進程阻塞,甚至產生死鎖

特別需要注意:如果子進程中的輸入流,輸出流或錯誤流中的內容比較多,最好使用緩存(注意上面的情況2)

Runtime

每個Java應用程序都有一個Runtime類實例,使應用程序能夠與其運行的環境相連接。可以通過getRuntime方法獲取當前運行時環境。 應用程序不能創建自己的Runtime類實例。

獲取進程信息

獲取進程的shell字符串 ps aux | grep procName| grep -v grep

java 調用shell 獲取進程信息

查詢所需的進程列表信息

重啟業務進程

為了解決在某個進程啟動失敗的時候,web端可以獲取到該進程的信息, 需要通過shell返回一個int值, 每個進程啟動結果占用1個bit位方式實現,web端獲取結果后,解決返回的結果,然后判斷是否有進程啟動失敗。

首先準備好shell腳本,內容如下:

總結

以上是生活随笔為你收集整理的shell监控java接口服务_Linux系统下Java通过shell脚本监控重启服务的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。