CentOS7 定時檢測進程占用內存大小,執行重啟進程操作(xjl456852原創)


在使用CentOS時,個別程序的進程會一直增大,直到宕機.但是這種程序本身有沒有更好的版本使用(比如ngrok免費就這樣,付費的就沒這個問題),所以想寫一個腳本定時檢測一下這個程序的情況,決定是否需要重啟,該重啟時重啟,沒有啟動則讓他啟動.

注:腳本名中最好不要包含ngrokd, 因為腳本執行時自己也會成為一個進程,獲取原始ngrokd的進程大小就不能簡寫為 grep "ngrokd"   ,而應改為全路徑:grep " /usr/local/ngrok/bin/ngrokd ", 而且pkill會把腳本本身結束掉, 但是為了更加通用以下按全路徑寫,不采用簡寫,腳本名可以隨意寫.

腳本作用:當ngrokd進程占用內存大於 10000時,重啟進程,如果沒有這個進程,則啟動進程.

ngrokd的程序在:/usr/local/ngrok/bin/ngrokd,可以根據自己情況進行修改

腳本名:restart-ngrokd.sh
腳本如下,將這個腳本放在/usr/local/sbin目錄下:
    
    
    
            
  1. #!/bin/bash
  2. #/usr/local/ngrok/bin/ngrokd -domain=xiejl.com -httpAddr=:80 &> /dev/null &
  3. param=" &> /dev/null &"
  4. memsize=`ps -aux | grep "/usr/local/ngrok/bin/ngrokd" | grep -v grep | awk '{printf $6 }'`
  5. echo $memsize
  6. if [[ $memsize -gt 10000 ]]; then
  7. echo "restart begin"
  8. ngrok_restart=`ps -aux | grep "/usr/local/ngrok/bin/ngrokd" | grep -v grep | awk '{for(i=11;i<=NF;i++)printf $i " "}'`
  9. echo $ngrok_restart
  10. pkill -f /usr/local/ngrok/bin/ngrokd
  11. eval "$ngrok_restart $param"
  12. echo "restart over"
  13. elif [ -z $memsize ]; then
  14. echo "start begin"
  15. eval "/usr/local/ngrok/bin/ngrokd -domain=xiejl.com -httpAddr=:80 $param"
  16. echo "start over"
  17. fi
腳本解釋:
param 變量是讓ngrok這個程序后台執行的參數
memsize 變量是ngrok的內存占用大小
if [[ $memsize -gt 10000 ]]; then 這里不能寫單中括號[ xxx ],加入 $memsize是空的, 寫[ xxx ]會出錯,所以用[[ xxx ]]
eval 是將命了和字符串參數拼接起來執行,當做一條命令執行.
pkill -f  進程全名. 結束匹配的全名,加入-f參數
awk '{for(i=11;i<=NF;i++)printf $i "  "}' 是將前面的結果中的第11列到后面的內容全部截取出來.

加入定時任務,定時重啟程序:
查看時間和時區:
   
   
   
           
  1. date -R
如果結果后面不是 +0800,那就不是東八區,不是中國時間.
可以修改為中國時間:
   
   
   
           
  1. cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
再次查看時間,看是否變回來了.

加入定時任務,凌晨4點重啟:
   
   
   
           
  1. crontab -e
添加:
   
   
   
           
  1. 0 4 * * * /usr/local/sbin/restart-ngrokd.sh

以后每天凌晨4點程序自動重啟,不用擔心程序會導致系統宕機了.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM