網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
本文介紹一種在Linux系統(tǒng)下為實(shí)現(xiàn)某些關(guān)鍵進(jìn)程狀態(tài)的實(shí)時(shí)監(jiān)控而使用shell腳本的編寫方法。在這里主要通過(guò)監(jiān)控某些進(jìn)程是否退出作為判斷依據(jù),如果某個(gè)進(jìn)程退出了,則進(jìn)行對(duì)應(yīng)的恢復(fù)處理,如重新拉起相關(guān)的進(jìn)程等。
下面介紹該腳本的實(shí)現(xiàn)流程。
首先生成一個(gè)名為”process_check.sh”的腳本,腳本內(nèi)容如下:
#!/bin/bash
#該函數(shù)檢查關(guān)鍵進(jìn)程的狀態(tài),最終返回進(jìn)程的個(gè)數(shù)。
checkprocess()
{
# echo "checkprocess...$1"
if [ "$1" = "" ];
then
return 1
fi
process_num=`ps -ef|grep "$1" |grep -v "grep" |wc -l`
# echo "checkprocess num=$process_num"
return $process_num
}
#進(jìn)程如有退出,則記錄相關(guān)的信息,并做相關(guān)的處理
recordinfo()
{
# echo "check $1"
if [ "$1" = "" ];
then
return
fi
#打印進(jìn)程退出的時(shí)間
date "+++++++++++++++++++ +%Y-%m-%d %H:%M:%S '$1' exit! +++++++++++++++++++"
#重新拉起這個(gè)進(jìn)程
"$1" &
echo "restart $1"
}
#檢查進(jìn)程的狀態(tài)
check()
{
echo "####check $1"
if [ "$1" = "" ];
then
return
fi
checkprocess "$1"
check_result=$?
#如果該進(jìn)程的個(gè)數(shù)為0,則說(shuō)明該進(jìn)程已經(jīng)退出
if [ $check_result -eq 0 ];
then
recordinfo "$1"
# exit
fi
}
#循環(huán)檢測(cè)
while [ 1 ] ; do
#關(guān)鍵進(jìn)程列表,多個(gè)進(jìn)程以逗號(hào)分隔,這里以兩個(gè)進(jìn)程為例子。
process_name="./test1,./test2"
OLD_IFS="$IFS"
IFS=","
arr=($process_name)
IFS="$OLD_IFS"
for s in ${arr[@]}
do
check "$s"
done
sleep 3
# echo "check loop..."
done
測(cè)試驗(yàn)證
這里寫一個(gè)簡(jiǎn)單的測(cè)試程序,代碼如下:
void main()
{
while(1) {
sleep(3);
}
}
編譯后生成兩個(gè)名為“test1”,“test2”的可執(zhí)行文件。
為了方便測(cè)試,可以將”process_check.sh”,”test1”,”test2”放置于同一個(gè)目錄下。
1.運(yùn)行”process_check.sh”,如下所示:
從上圖可知,”test1”,”test2”剛開(kāi)始并未被拉起,運(yùn)行”process_check.sh”之后,檢測(cè)出”test1”,”test2”不存在,則觸發(fā)拉起的機(jī)制,最終”test1”,”test2”被啟動(dòng)了。
2.運(yùn)行過(guò)程中kill掉某一個(gè)進(jìn)程,驗(yàn)證”process_check.sh”是否有將該進(jìn)程拉起。
由下圖可知,被kill的進(jìn)程最終又被拉起了。
至此,該腳本的功能已被驗(yàn)證完畢。
結(jié)語(yǔ):在 Linux 平臺(tái)下,shell 腳本監(jiān)控是一個(gè)非常簡(jiǎn)單、方便的工具,它可以有效的對(duì)服務(wù)器、進(jìn)程進(jìn)行監(jiān)控,對(duì)系統(tǒng)開(kāi)發(fā)以及進(jìn)程維護(hù)人員非常有幫助。
原文鏈接:https://blog.csdn.net/zhongcaogen/article/details/129218446
- 上一篇:沒(méi)有了
- 下一篇:沒(méi)有了
相關(guān)推薦
- 2022-08-27 DOS編寫腳本常用命令整理小結(jié)_DOS/BAT
- 2022-09-22 uni ui 、color ui 圖標(biāo)icon的使用
- 2022-04-25 python變量賦值機(jī)制踩坑記錄_python
- 2024-01-15 Stream流 - 獲取Stream和轉(zhuǎn)換操作(含基本數(shù)據(jù)類型流)
- 2022-04-20 Python設(shè)計(jì)模式中的結(jié)構(gòu)型適配器模式_python
- 2022-05-05 Python學(xué)習(xí)之字符串常用方法總結(jié)_python
- 2022-07-10 el-table收集列表中被選中復(fù)選框數(shù)據(jù)信息
- 2023-03-27 Android?Framework原理Binder驅(qū)動(dòng)源碼解析_Android
- 欄目分類
-
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支