shell脚本运维发送微信消息

#!/bin/bash
# 监控ElasticSearch服务器运行状态,若服务器停止运行则发送微信消息通知

# 脚本及配置文件config.json运行位置 根据实际目录修改
cd /root/Desktop

# 系统信息
Date=`date +%Y-%m-%d`
Date_time=`date "+%Y-%m-%d %H:%M:%S"`
Host_name=`hostname`
IP_addr=`ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"`

# 微信token获取接口参数
Grant_type="client_credential"

# 微信平台申请的APPID
Appid="*******************************"

# 微信平台申请的APP密码
Secret="****************************************"

# 微信平台发送消息token获取的地址,需要在微信平台上设置ip白名单才能获取
GURL="https://api.weixin.qq.com/cgi-bin/token?grant_type=$Grant_type&appid=$Appid&secret=$Secret"

# 获取微信token
# 获取微信访问token
# 返回的token结果json数据为
# {
#    "access_token": "40_MYUorLPStF_XH9-XPetkaLWrWiwJoDtxiQqmO-HASzwnWTJ4dfnpxHaAcgk2GFac13y06p4psVJTb_msQlXk8ADLV2tQbf5ISSFihH4v9neoxp6XPBs_QgUivmSxGUhMzzcwweMzUXjwg38fGCAhABARNL",
#    "expires_in": 7200
# } 
function get_token(){
 RESULT=$(/usr/bin/curl -s -G $GURL)
 Token=$(echo ${RESULT} | jq -r '.access_token')
 ExpiresIn=$(echo ${RESULT} | jq -r '.expires_in')
}

# 保存token到config.json文件中 时间戳记录token的最初获取时间,之后用于计算token是否失效
function save_token(){
  echo "{\"access_token\":\"$Token\",\"expires_in\": $ExpiresIn,\"timestamp\":\"$Date_time\"}" > config.json
}

# 读取配置文件config.json获取access_token,token的获取时间及token过期时间长度
Token=$(jq -r '.access_token' config.json)
Timestamp=$(jq -r '.timestamp' config.json)
ExpiresIn=$(jq -r '.expires_in' config.json)
echo "Token: $Token"
echo "Timestamp: $Timestamp"
echo "ExpiresIn: $ExpiresIn"

# 判断token是否过期

# 计算token已经产生的时间长度
Time=$(($(date +%s) - $(date +%s -d "$Timestamp")));
echo "During time: $Time"
if [ $Time -gt $ExpiresIn ]
then
  echo "微信Token已经过期"
  # 获取新的微信访问token
  get_token
  # 保存微信访问token到config.json文件中
  save_token
else
  echo "微信Token仍然有效"  
fi

# 微信访问接口url
PURL="https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=$Token"

# 微信消息参数
# 消息接收用户
ToUser="*********************************"
# 消息模板id 模板需要在微信平台事先定制,通过id值访问
Template_id="*************************************"

#监控Mysql服务 
Port=`netstat -nlt|grep 3306|wc -l`
if [ $Port -ne 1 ]
then
# /etc/init.d/mysqld start
 echo "$Date_time $IP_addr $Host_name MySQL is stopped"
else
 echo "$Date_time $IP_addr $Host_name MySQL is running"
fi

#监控Elasticsearch服务 
Port=`netstat -nlt|grep 9200|wc -l`
if [ $Port -ne 1 ]
then
 # Elasticsearch服务器已经停止运行,发送微信消息通知
 echo "$Date_time $IP_addr $Host_name Elasticsearch is stopped"
 Para="{
           \"touser\":\"$ToUser\",
           \"template_id\":\"$Template_id\",
           \"data\":{
                   \"title\": {
                       \"value\":\"elasticsearch服务器\",
                       \"color\":\"#173177\"
                   },
                   \"ip\":{
                       \"value\":\"$IP_addr\",
                       \"color\":\"#173177\"
                   },                  
                   \"time\": {
                       \"value\":\"$Date_time\",
                       \"color\":\"#173177\"
                   },
                   \"message\":{
                       \"value\":\"服务器停止运行\",
                       \"color\":\"#173177\"
                   }
           }
       }"
 echo $Para
# 发送微信消息
 curl --location --request POST ${PURL} --header 'Content-Type: application/json' --data-raw "$Para"
else
 echo "$Date_time $IP_addr $Host_name Elasticsearch is running" 
fi

你可能感兴趣的:(运维,linux,ubuntu,shell,运维)