linux异常报警推送企业微信群聊机器人

#!/bin/bash

WEBHOOK_URL="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=***"
SERVICE_NAME="MedicTechServer"
STATE_FILE="/tmp/medictech_server_state"

# 获取当前状态
SERVICE_STATUS=$(systemctl is-active $SERVICE_NAME 2>/dev/null)
SERVICE_STATE=$(systemctl show $SERVICE_NAME -p SubState --value 2>/dev/null)

# 判断是否异常
if [ "$SERVICE_STATUS" != "active" ] || [ "$SERVICE_STATE" == "failed" ]; then
    CURRENT_STATE="DOWN"
else
    CURRENT_STATE="UP"
fi

# 读取上次状态
if [ -f "$STATE_FILE" ]; then
    LAST_STATE=$(cat $STATE_FILE)
else
    LAST_STATE="UNKNOWN"
fi

# 状态发生变化时才告警
if [ "$CURRENT_STATE" != "$LAST_STATE" ] && [ "$CURRENT_STATE" == "DOWN" ]; then
    HOSTNAME=$(hostname)
    FAILED_TIME=$(date '+%Y-%m-%d %H:%M:%S')
    
    ALERT_MSG="## 🚨 服务异常告警\n"
    ALERT_MSG="${ALERT_MSG}> **服务器**: <font color=\"info\">$HOSTNAME</font>\n"
    ALERT_MSG="${ALERT_MSG}> **服务名称**: <font color=\"warning\">$SERVICE_NAME</font>\n"
    ALERT_MSG="${ALERT_MSG}> **状态变化**: <font color=\"warning\">运行中 → 已停止</font>\n"
    ALERT_MSG="${ALERT_MSG}> **检测时间**: $FAILED_TIME\n"
    ALERT_MSG="${ALERT_MSG}\n> **请立即登录服务器检查并恢复服务!**"
    
    curl $WEBHOOK_URL -H 'Content-Type: application/json' \
        -d "{\"msgtype\":\"markdown\",\"markdown\":{\"content\":\"$ALERT_MSG\"}}"
    
    # 可选:尝试自动重启服务
    # systemctl restart $SERVICE_NAME
fi

# 更新状态文件
echo "$CURRENT_STATE" > $STATE_FILE

部署

# 创建脚本目录(可选)
sudo mkdir -p /usr/local/bin/monitor

# 创建脚本文件
sudo vi /usr/local/bin/monitor/check_medictech.sh

# 粘贴上面的脚本内容,修改 WEBHOOK_URL

# 赋予执行权限
sudo chmod +x /usr/local/bin/monitor/check_medictech.sh

# 测试运行
/usr/local/bin/monitor/check_medictech.sh

# 编辑 crontab
crontab -e

# 添加以下行(每分钟检查一次)
* * * * * /usr/local/bin/monitor/check_medictech.sh >> /var/log/medictech_monitor.log 2>&1

# 或者每2分钟检查一次
*/2 * * * * /usr/local/bin/monitor/check_medictech.sh >> /var/log/medictech_monitor.log 2>&1
posted @ 2026-04-03 22:41  爱晒太阳的懒猫。。  阅读(19)  评论(0)    收藏  举报