美文网首页
通过Shell命令-监视一个进程或端口,挂掉后自动重启,并自定义

通过Shell命令-监视一个进程或端口,挂掉后自动重启,并自定义

作者: AceCream佳 | 来源:发表于2019-04-10 11:32 被阅读0次

1.问题的产生

主要是因为某些内存问题,kylin总是自动挂掉。排查后发现因为多任务执行会占用很大内存,oom killer可能会因为内存不足了,把内存占用大的或者增长快的给自动kill掉。所以这边做了一些处理,写了一个自动重启。

2.针对进程名

processExist=`ps aux|grep kylin |grep -v "grep"`
  if [[ -z $processExist ]];then
    /opt/soft/test.sh start
  echo "proecss is restarted"
  fi

第一行是执行查询'kylin'的进程,并把grep的进程去掉,这样就能确定进程是否存活(但是不保险,后续会说)
然后就是简单的判断了
-z是判断 :

  • z 判断 变量的值,是否为空; zero = 0
  • 变量的值,为空,返回0,为true
  • 变量的值,非空,返回1,为false

如果为空,我们就执行脚本!并输出一条消息。当然也可以自定义一些动作,比如日志,并输出到指定文件。

单独写一下日志的脚本就是:

source /etc/profile
MYLOG="/opt/soft/logs/kylin.restart.log"
echo "$1"
echo "$(date -d today +"%Y%m%d %H:%M:%S") - $1" >> ${MYLOG} 2>> ${MYLOG}

这个仅仅是打印了时间而已,可以在$1进行 自定义。

但是这样有一个弊端。很多时候,我们无法通过名字去确定进程,可能几个进程有相似的名字,假如说我们有kylin_log 和 kylin_test两个进程,当我们grep的时候用kylin会查出来两个进程(除了grep)。
所以可以用另外一种方式——端口。

3.针对端口

比如我想针对固定的7070端口进行监控,那么要修改shell脚本,使用awk:

KylinListeningPort=`netstat -an | grep ":7070" | awk '$1 == "tcp" && $NF == "LISTEN" {print $0}' | wc -l`

然后进行判断

if [ $KylinListeningPort-eq 0 ];then
  如果端口没有占用的话要怎么怎么样
else
  如果端口被占用的话要怎么怎么样
fi

相关文章

网友评论

      本文标题:通过Shell命令-监视一个进程或端口,挂掉后自动重启,并自定义

      本文链接:https://www.haomeiwen.com/subject/iqqniqtx.html