Linux脚本-查看mq没有消费者,则自动重启java进程

*/5 * * * *  /usr/bin/flock -xn /tmp/mq_cmonitor.lock -c 'sh /data/mq_comsumer_monitor.sh >> /data/daas_sh/mq_cmonitor.log' 

分隔日志 logrotate -f /etc/logrotate.d/mq_comsumer_monitor

/etc/logrotate.d /mq_comsumer_monitor

/data/location_sh/*.log {
   daily
   dateext
   rotate 7
   compress
   create 640 root root
   sharedscripts
}

 

#!/bin/bash
# file name	: mq_comsumer_monitor.sh
# function	: 监控rabbitmq 某个消费队列,没有消费者则
# notes		: 1.脚本运行环境在启动java进程所在的服务器上;
#		  2.通过ssh链接获取队列消费者信息
#                 3.crontab执行时需要加独占锁,因脚本中有耗时操作,防止多个一起执行                 
# date		: 18/12/4
# author	: summer



#监控的队列
monitor_quenue_name="xxxxTask"

#日志数据文件
data_path="$(cd $(dirname ${0}); pwd)/mq_comsumer_monitor.data"
#每天最大可启次数
max_reload_times="12"
#小于等于水位线,则需要重启
water_line="0"

#rabbitmq地址
mq_addr="root@10.31.192.37"
mq_pwd="XXXX"


#打印日志
print_log(){
  echo "$(date +"%Y-%m-%d %T"):${1}"
}

#生成新的记录,文件不存在则新建一个初值为0的记录
create_new_data(){
  if [[ ! -f "${data_path}" ]];
  then
    echo "$(date +"%Y-%m-%d %H/%M/%S");0" > ${data_path}
  fi

  if [[ -n ${1} ]];
  then
    echo "$(date +"%Y-%m-%d %H/%M/%S");${1}" >> ${data_path}
  fi
}


#重新启动java进程
reload_java_proc(){
  print_log "reloading..."
  /data/daasdocker/docker-compose -f docker-compose185.yml rm -s -f  webapp8080
  
  print_log "stop old webapp8080..."
  sleep 10

  /data/daasdocker/docker-compose -f docker-compose185.yml up -d webapp8080
  print_log "reload new webapp8080..."
  sleep 10

  print_log "reload finshed"
}


#查询远程mq队列
search_queueCustomers_nums(){
  queue_name=${1}
  #本次执行是今天第几次
  this_times=$(expr ${2} + 1)
  print_log "====1=queue_name:${queue_name},this_times:${this_times}"
  
  #numbers=$(rabbitmqctl list_consumers | grep  "${queue_name}" | awk '{print $5}')
  customer_info=$(sshpass -p ${mq_pwd} ssh ${mq_addr} "rabbitmqctl list_consumers | grep ${queue_name} ")
  print_log "customer_info:${customer_info}"
  numbers=$(echo "${customer_info}" | awk '{print $5}')
  
  if [[ -n ${numbers} ]];
  then

    print_log "${monitor_quenue_name}:customers numbers:${numbers}"
    if [[ ${numbers} -eq ${water_line} ]];
    then
      #重启
      reload_java_proc
      create_new_data "${this_times}"
      
    else
      #不需要重启
      print_log "not need reload..."
    fi

  else
    echo "is null ${numbers}"
    #重启
    reload_java_proc
    create_new_data "${this_times}"
  fi
}

#主体
main_body(){
   now_date=$(date +"%Y-%m-%d") 
   #获取年月日
   last_date=$(sed -n '$p' ${data_path} |cut -d" " -f1)
   #获取次数
   last_times=$(sed -n '$p' ${data_path} |cut -d";" -f2)
   
   if [[ ${now_date} -eq ${last_date} ]];
   then
     print_log "相等====now:${now_date}===last:${last_date}"
     
     #小于设置的每天最多重启次数则可以重启
     if [[ ${last_times} -le ${max_reload_times} ]];
     then
        search_queueCustomers_nums "${monitor_quenue_name}"  "${last_times}"
     else
        print_log "excess max reload times,last_times:${last_times}"
     fi

   else
     print_log "不相等====now:${now_date}===last:${last_date}"
     #插入一条记录
     create_new_data "0"
   fi   
}


#创建一个记录

echo "Begin:"$$
create_new_data
main_body
echo "finsh:"$$

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值