• 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点程序自动重启,不用担心程序会导致系统宕机了.

  • 相关阅读:
    Java转Exe
    匹配数字和字母的正则表达式
    POI
    Maven– HelloWorld实例
    eclipse+maven+tomcat构建web工程
    Maven
    SSH
    Struct2小结:
    Eclipse中没有javax.servlet和javax.servlet.http包的处理办法
    openSession()与getCurrentSession()的区别
  • 原文地址:https://www.cnblogs.com/xjl456852/p/5857887.html
Copyright © 2020-2023  润新知