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
静,静,静

浙公网安备 33010602011771号