卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章1857本站已运行508

宝塔nginx mysql 运行监控脚本

宝塔安装的环境,有时候会出错,不是mysql停止就是nginx停止,那么有没有监控脚本保证他们都正常运行呢?下面就是小编用ai写的运用宝塔计划任务的脚本!

宝塔面板添加方法:

打开宝塔面板 → 左侧点击【计划任务】
点击右上角【添加任务】
设置如下:
任务类型:Shell脚本
任务名称:监控MySQL和Nginx状态
执行周期:建议选择 每30分钟或是5分钟

脚本内容:
DATE=$(date "+%Y-%m-%d %H:%M:%S")
LOG_FILE="/www/wwwlogs/bt_service_monitor.log"

check_mysql() {
    systemctl is-active --quiet mysqld
    if [ $? -ne 0 ]; then
        echo "$DATE [ERROR] MySQL 未运行,尝试重启..." >> "$LOG_FILE"
        systemctl restart mysqld
        sleep 2
        systemctl is-active --quiet mysqld && \
            echo "$DATE [INFO] MySQL 重启成功。" >> "$LOG_FILE" || \
            echo "$DATE [FATAL] MySQL 重启失败!" >> "$LOG_FILE"
    else
        echo "$DATE [OK] MySQL 正常运行。" >> "$LOG_FILE"
    fi
}

check_nginx() {
    systemctl is-active --quiet nginx
    if [ $? -ne 0 ]; then
        echo "$DATE [ERROR] Nginx 未运行,尝试重启..." >> "$LOG_FILE"
        systemctl restart nginx
        sleep 2
        systemctl is-active --quiet nginx && \
            echo "$DATE [INFO] Nginx 重启成功。" >> "$LOG_FILE" || \
            echo "$DATE [FATAL] Nginx 重启失败!" >> "$LOG_FILE"
    else
        echo "$DATE [OK] Nginx 正常运行。" >> "$LOG_FILE"
    fi
}

check_mysql
check_nginx

注意事项:

日志路径 /www/wwwlogs/bt_service_monitor.log 是宝塔默认日志目录,确保该目录存在。也可以改成 /root/bt_monitor.log 等你喜欢的位置。

如果你使用的是 CentOS 7/8、Ubuntu 16+ 等系统,默认使用的是 systemctl,这个脚本就能直接运行。

如果你是使用的 MariaDB 或者其他服务名,记得把 mysqld 改成实际服务名(比如 mariadb)。

升级版本:

#!/bin/bash

DATE=$(date "+%Y-%m-%d %H:%M:%S")
LOG_FILE="/www/wwwlogs/bt_service_monitor.log"

# ====== 通知开关(填上就启用) ======

# Server酱(https://sct.ftqq.com/sendkey)
SCKEY="你的Server酱SendKey"

# PushPlus(http://www.pushplus.plus/)
PUSHPLUS_TOKEN="你的PushPlus token"

# 钉钉机器人(群机器人 Webhook 地址)
DING_WEBHOOK="https://oapi.dingtalk.com/robot/send?access_token=xxx"

# 企业微信机器人(Webhook 地址)
WECHAT_WEBHOOK="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx"

# ===================================

# 通用发送函数
notify_all() {
    local msg="$1"

    # Server酱
    if [ -n "$SCKEY" ]; then
        curl -s -X POST "https://sctapi.ftqq.com/${SCKEY}.send" \
            -d "title=宝塔服务监控告警" \
            -d "desp=${msg}" > /dev/null
    fi

    # PushPlus
    if [ -n "$PUSHPLUS_TOKEN" ]; then
        curl -s -X POST "http://www.pushplus.plus/send" \
            -H "Content-Type: application/json" \
            -d "{\"token\":\"${PUSHPLUS_TOKEN}\",\"title\":\"宝塔服务监控告警\",\"content\":\"${msg}\"}" > /dev/null
    fi

    # 钉钉机器人
    if [ -n "$DING_WEBHOOK" ]; then
        curl -s -X POST "${DING_WEBHOOK}" \
            -H 'Content-Type: application/json' \
            -d "{\"msgtype\": \"text\", \"text\": {\"content\": \"[宝塔服务监控告警] ${msg}\"}}" > /dev/null
    fi

    # 企业微信机器人
    if [ -n "$WECHAT_WEBHOOK" ]; then
        curl -s -X POST "${WECHAT_WEBHOOK}" \
            -H 'Content-Type: application/json' \
            -d "{\"msgtype\": \"text\", \"text\": {\"content\": \"[宝塔服务监控告警] ${msg}\"}}" > /dev/null
    fi
}

# 检查服务并重启逻辑
check_service() {
    local name="$1"
    local service_name="$2"
    local retry=0

    while ! systemctl is-active --quiet "$service_name"; do
        echo "$DATE [ERROR] $name 未运行,尝试重启(第 $((retry+1)) 次)..." >> "$LOG_FILE"
        systemctl restart "$service_name"
        sleep 2
        ((retry++))
        if systemctl is-active --quiet "$service_name"; then
            echo "$DATE [INFO] $name 重启成功。" >> "$LOG_FILE"
            notify_all "$name 异常,但已成功重启。"
            return
        fi
        if [ "$retry" -ge 3 ]; then
            echo "$DATE [FATAL] $name 重启3次失败,准备重启服务器!" >> "$LOG_FILE"
            notify_all "$name 重启3次失败,服务器即将重启!"
            shutdown -r now
            return
        fi
    done

    echo "$DATE [OK] $name 正常运行。" >> "$LOG_FILE"
}

# 开始检测
check_service "MySQL" "mysqld"
check_service "Nginx" "nginx"
每5分钟检查 MySQL 和 Nginx 是否正常
如果某个服务:
重启失败三次 → 自动重启整台服务器
支持钉钉或微信推送通知(通过Server酱、PushPlus等)

Server酱通知配置:

打开:https://sct.ftqq.com/login 登录或注册
创建一个发送通道,获得一个 SendKey
替换脚本中的:PUSH_KEY="SCTxxxxxx"

通知平台快速注册说明:
平台    地址    获取方式
Server酱    https://sct.ftqq.com    登录 → 创建通道 → 拿 SendKey
PushPlus    http://pushplus.plus    登录 → 个人中心 → Token
钉钉群机器人    群设置 → 智能群助手 → 添加机器人    获取 Webhook 地址
企业微信机器人    管理后台 → 应用 → 自建机器人    获取 Webhook 地址
卓越飞翔博客
上一篇: linux 系统批量替换删除html文本办法
下一篇: 返回列表
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏