cpu memory監控指令碼的怪異現象

2021-06-12 16:18:26 字數 1348 閱讀 5727

一開始nagios執行監控指令碼的時候,總是不定期地偶爾地出現下面的錯誤

[: too many arguments

指令碼一開始是這麼寫的:

guard_info=`ps aux | grep guard | grep -v grep | grep guard_replica_id | awk ''`

echo guard_info:$guard_info

if [ "$guard_info" = "" ]; then

echo "guard is not found"

exit 0

fivsz=`echo $guard_info | awk ''`

echo vsz:$vsz

cpu=`echo $guard_info | awk '' | awk -f"." ''`

echo cpu:$cpu

if [ $vsz -gt 606192 ]; then

echo "vsz as large as $vsz"

exit 2

elif [ $cpu -gt 5 ]; then

echo "cpu percentage is $p_cpu"

exit 2

else

exit 0fi

最後發現是guard本身會fork子程序,在呼叫execve之前和fork()之後有那麼乙個小時間視窗,這個時候會存在兩個相同名字相同引數的程序存在。

解決辦法就是用elapsed time來對grep出來的guard程序進行排序,取時間最長的那個。最後指令碼變成這樣:

guard_info=`ps -c guard -o pid=,etime=,vsz=,%cpu= --sort -etime | head -1`

echo guard_info:$guard_info

if [ "$guard_info" = "" ]; then

echo "guard is not found"

exit 0

fivsz=`echo $guard_info | awk ''`

echo vsz:$vsz

cpu=`echo $guard_info | awk '' | awk -f"." ''`

echo cpu:$cpu

if [ $vsz -gt 606192 ]; then

echo "vsz as large as $vsz"

exit 2

elif [ $cpu -gt 5 ]; then

echo "cpu percentage is $p_cpu"

exit 2

else

exit 0

fi

mysql 監控指令碼 監控mysql狀態指令碼

監控mysql狀態,發現宕後,自動重啟,每秒檢查一次。check.sh bin bash while true do bin sleep 1 sh mysql status.sh done chengkill bin sh pid kill thread for chenglee if filefo...

Linux CPU 監控指令碼

下面是乙個簡單的cpu監控指令碼,當然還可以在進行全面考慮公升級該指令碼。bin sh gt 60 伺服器只有乙個cpu scriptdir root shell cpu jk 目錄存放 logdir scriptdir log 日誌檔案存放及目錄建立 清理 if d logdir then ech...

監控報警指令碼

內部自己開發的服務應用程式 經常會由各種bug宕掉,所以寫了個監控指令碼 如下 bin bash echo processgroud is start date while dotradeport netstat antp grep 0.0.0.0 8888 awk if tradeport lis...