Linux進程自動監控bash shell指令碼

來源:互聯網
上載者:User

該指令碼的用途:

主要用於監控 linux VPS伺服器負載及記憶體佔用,如 MySQl、php-fpm,當負載或記憶體佔用達到設定值後,便自動重啟該進程以避免宕機。

代碼如下:

# 設定最大記憶體佔用百分比

PID_MEM_MAX="85"

# 設定最大系統負載

SYS_LOAD_MAX="3"

# 設定需要監控的服務名稱

NAME_LIST="php-fpm mysql"

for NAME in $NAME_LIST

do

# 初始化記憶體統計

PID_MEM_SUM=0

# 擷取該程式總進程數

PID_NUM_SUM=`ps aux | grep $NAME | wc -l`

# 列出每個進程記憶體佔用百分比

PID_MEM_LIST=`ps aux | grep $NAME | awk '{print $4}'`

# 計算所有進程總記憶體佔用

for PID_MEM in $PID_MEM_LIST

do

PID_MEM_SUM=`echo $PID_MEM_SUM + $PID_MEM | bc`

done

# 擷取最近一分鐘系統負載

SYS_LOAD=`uptime | awk '{print $(NF-2)}' | sed 's/,//'`

# 比較記憶體佔用和系統負載是否超過閥值

MEM_VULE=`awk 'BEGIN{print('"$PID_MEM_SUM"'>='"$PID_MEM_MAX"'?"1":"0")}'`

LOAD_VULE=`awk 'BEGIN{print('"$SYS_LOAD"'>='"$SYS_LOAD_MAX"'?"1":"0")}'`

# 如果系統記憶體佔用和系統負載超過閥值,則進行下面操作。

if [ $MEM_VULE = 1 ] || [ $LOAD_VULE = 1 ] ;then

# 寫入日誌

echo $(date +"%y-%m-%d %H:%M:%S") "killall $NAME" "(MEM:$PID_MEM_SUM,LOAD:$SYS_LOAD)">> /var/log/autoreboot.log

# 正常停止服務

/etc/init.d/$NAME stop

sleep 3

# 強制關閉

pkill $NAME

# 重啟

/etc/init.d/$NAME start

#寫入日誌

echo $(date +"%y-%m-%d %H:%M:%S") "start $NAME" "(MEM:$PID_MEM_SUM,LOAD:$SYS_LOAD)" >> /var/log/autoreboot.log

else

echo "$NAME very health!(MEM:$PID_MEM_SUM,LOAD:$SYS_LOAD)" > /dev/null

fi

done

代碼結束

以上代碼儲存為一個檔案,例如:auto_reboot.sh

添加計劃任務,設定每分鐘檢查一次

crontab -e

* * * * * /bin/bash /root/auto_reboot.sh

注意檔案的位置要搞正確。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.