定时监测MQTT服务状态脚本

场景

公司MQ服务是部署在阿里云上面的,有一段时间经常在凌晨4.5点的时候被内核kill掉进程,看了日志显示OOM,机子内存是1G,凌晨的时候没有使用MQ的场景,一时也找不出原因,只能先整个定时脚本监测服务状态。

脚本

首先,找个目录新建一个脚本,如:vi /test/checkMqtt.sh  (后续填坑:此处的文件名不能包含mqtt字样,因为脚本执行kill指令的时候会把自己给Kill了。。导致后面的指令没执行)

#!/bin/sh

echo "开始执行检查MQTT状态的脚本..."
#这下面的路径,根据自己的实际安装目录来修改
cmd="cd /emqtt/emqttd/bin/"
$cmd

echo "已经进入/emqtt/emqttd/bin/目录下!开始执行检查MQTT状态指令..."

check_result=`./emqttd_ctl status`
echo "检查MQTT状态结果:$check_result"

#判断MQ状态
if [[ $check_result =~ "started" ]]
then
  echo "MQTT正常运行中..."
else
  echo "MQTT已经瓜了,即将重启MQTT..."
  #这里杀进程是因为有些版本的MQ被内核Kill掉进程后,会有遗留的进程在
  kill_mqtt=`ps -ef | grep mqtt | grep -v grep | awk '{print $2}' | xargs kill -9`
  echo "杀死所有MQTT进程:$kill_mqtt"
  #启动MQ
  start_mqtt=`./emqttd start`
  echo $start_mqtt
fi

保存,退出。

然后手动运行一下,看下有没问题:sh /test/checkMqtt.sh

没问题的话就进入下一步,放进定时任务,定时执行:crontab -e像vi一样操作加入下面的内容,然后wq保存退出。

根据自己的实际需求修改Cron表达式

*/1 * * * *  /test/checkMqtt.sh

重启crond服务:service crond restart

完成,可以自己模拟kill掉进程,看看有没生效。

 

后续填坑:

另外如果定时任务没执行成功的话,可以在crontab -e追加记录日志如:

*/1 * * * *  /zhao/check_status.sh >> /zhao/aaa.log

或者看cat /var/log/cron有没执行

如果cron有执行,但是脚本好像没运行的话,可能是权限没给

chomd +x /zhao/check_status.sh

再重启一下服务就行了

另外,脚本也可以换成检查进程数是否满足,来判断MQ服务还在不在

#!/bin/sh

echo "开始执行检查MQTT状态的脚本..."

cmd="cd /emqtt/emqttd/bin/"
$cmd

echo "已经进入/emqtt/emqttd/bin/目录下!开始执行检查MQTT进程数量..."

count=`ps -ef |grep mqtt |grep -v "grep" |wc -l`
echo "检查MQTT状态结果:$count"

if [ $count -ge 5 ]
then
  echo "MQTT正常运行中..."
else
  echo "MQTT已经瓜了,即将重启MQTT..."
  kill_mqtt=`ps -ef | grep mqtt | grep -v grep | awk '{print $2}' | xargs kill -9`
  echo "杀死所有MQTT进程:$kill_mqtt"
  sleep 5s
  start_mqtt=`./emqttd start`
  echo $start_mqtt
  echo "已执行重启操作..."
fi

 

 

 

 

 

注:仅供自己学习,记录问题和参考,若有带来误解和不便请见谅,共勉!

猜你喜欢

转载自blog.csdn.net/u011267225/article/details/82415380