开启智能数字体验
Djacore CMS 驱动未来

基于Django 5.2的企业级智能内容管理系统,为千万级数据量设计, 提供安全、高效、可扩展的网站建设与内容管理一体化解决方案

宝塔监测CPU IO的shell代码

:本站 2025-11-28 17:01:37 15

宝塔监测CPU IO的shell代码

无docker版本

#!/bin/bash

# 阈值配置(生产环境建议调整)
IO_THRESHOLD=70 # iowait百分比阈值(正常服务器通常<30%)
CPU_THRESHOLD=70 # CPU总使用率阈值(用户+系统)
MEMORY_THRESHOLD=70 # 内存使用率阈值

# 获取精确系统指标
get_system_stats() {
    # 从/proc/stat获取iowait数据(单位:1/100秒)
    local cpu_line=$(grep 'cpu ' /proc/stat)
    local total_jiffies=$(echo $cpu_line | awk '{sum=0; for(i=2;i<=8;i++)sum+=$i; print sum}')
    local iowait_jiffies=$(echo $cpu_line | awk '{print $6}')
    io_wait=$(awk "BEGIN {printf \"%.1f\", ($iowait_jiffies / $total_jiffies) * 100}")

    # 计算CPU使用率(基于/proc/loadavg)
    local cpu_cores=$(nproc)
    cpu_usage=$(awk -v cores="$cpu_cores" '{printf "%.1f", ($1 / cores) * 100}' /proc/loadavg)

    # 内存使用率计算(兼容不同free版本)
    memory_usage=$(free -b | awk '/Mem/ {printf "%.1f", $3/$2 * 100}')
}

# 系统状态反馈函数
report_status() {
    local status_msg="当前状态: IO=${io_wait}% CPU=${cpu_usage}% MEM=${memory_usage}%"
    echo "$(date "+%Y-%m-%d %H:%M:%S") - ${status_msg}"
}

# 重启判断逻辑
check_and_restart() {
    # 使用awk进行浮点数比较,避免依赖bc
    local trigger_io=$(awk -v io="$io_wait" -v th="$IO_THRESHOLD" 'BEGIN {print (io > th) ? 1 : 0}')
    local trigger_cpu=$(awk -v cpu="$cpu_usage" -v th="$CPU_THRESHOLD" 'BEGIN {print (cpu > th) ? 1 : 0}')
    local trigger_mem=$(awk -v mem="$memory_usage" -v th="$MEMORY_THRESHOLD" 'BEGIN {print (mem > th) ? 1 : 0}')

    # 触发重启条件时的处理
    if [ "$trigger_io" -eq 1 ] || [ "$trigger_cpu" -eq 1 ] || [ "$trigger_mem" -eq 1 ]; then
        echo "$(date "+%Y-%m-%d %H:%M:%S") - 触发重启: IO=${io_wait}% CPU=${cpu_usage}% MEM=${memory_usage}%"
        if systemctl restart mysql; then
            echo "My**L重启成功"
            exit 0
        else
            echo "My**L重启失败! 错误码:$?" >&2
            exit 1
        fi
    else
        # 未触发条件时输出状态
        report_status
    fi
}

# 主执行流程
get_system_stats
check_and_restart

# 最终状态确认(防止意外静默退出)
report_status
exit 0

系统mysql+docker mysql

#!/bin/bash

# 阈值配置
IO_THRESHOLD=70
CPU_THRESHOLD=70
MEMORY_THRESHOLD=70

# My**L服务标识
MY**L_SERVICE=""
CONTAINER_NAME="mysql_eazm-mysql_eazM-1"  # 修改为您的实际容器名称

# 检测My**L运行环境
detect_mysql_environment() {
    # 检查Docker中的My**L
    if docker ps --format "table {{.Names}}" | grep -q "$CONTAINER_NAME"; then
        if docker exec "$CONTAINER_NAME" which mysql >/dev/null 2>&1; then
            MY**L_SERVICE="docker"
            echo "检测到My**L运行在Docker容器: $CONTAINER_NAME"
            return 0
        fi
    fi
    
    # 检查宿主机系统服务
    if systemctl is-active mysql >/dev/null 2>&1 || 
       systemctl is-active mysqld >/dev/null 2>&1; then
        MY**L_SERVICE="systemd"
        echo "检测到My**L运行在宿主机系统服务"
        return 0
    fi
    
    # 检查宝塔面板服务
    if [ -f "/etc/init.d/bt" ] && /etc/init.d/bt status >/dev/null 2>&1 && 
       [ -f "/etc/init.d/mysqld" ] && /etc/init.d/mysqld status >/dev/null 2>&1; then
        MY**L_SERVICE="bt"
        echo "检测到My**L运行在宝塔面板管理下"
        return 0
    fi
    
    echo "错误: 未检测到运行的My**L服务" >&2
    return 1
}

# 重启My**L服务
restart_mysql() {
    case "$MY**L_SERVICE" in
        "docker")
            echo "重启Docker容器中的My**L..."
            echo "容器名称: $CONTAINER_NAME"
            if docker restart "$CONTAINER_NAME"; then
                echo "Docker My**L重启成功"
                return 0
            else
                echo "Docker My**L重启失败! 错误码:$?" >&2
                return 1
            fi
            ;;
        "systemd")
            echo "重启系统服务My**L..."
            # 尝试不同的服务名
            if systemctl restart mysql 2>/dev/null; then
                echo "系统服务mysql重启成功"
                return 0
            elif systemctl restart mysqld 2>/dev/null; then
                echo "系统服务mysqld重启成功"
                return 0
            else
                echo "系统服务My**L重启失败! 错误码:$?" >&2
                return 1
            fi
            ;;
        "bt")
            echo "重启宝塔My**L服务..."
            if /etc/init.d/mysqld restart; then
                echo "宝塔My**L重启成功"
                return 0
            else
                echo "宝塔My**L重启失败! 错误码:$?" >&2
                return 1
            fi
            ;;
        *)
            echo "未知的My**L服务类型" >&2
            return 1
            ;;
    esac
}

# 获取系统指标
get_system_stats() {
    # 从/proc/stat获取iowait数据
    local cpu_line=$(grep 'cpu ' /proc/stat)
    local total_jiffies=$(echo $cpu_line | awk '{sum=0; for(i=2;i<=8;i++)sum+=$i; print sum}')
    local iowait_jiffies=$(echo $cpu_line | awk '{print $6}')
    
    if [ "$total_jiffies" -eq 0 ]; then
        io_wait=0
    else
        io_wait=$(awk "BEGIN {printf \"%.1f\", ($iowait_jiffies / $total_jiffies) * 100}")
    fi

    # 计算CPU使用率(基于/proc/loadavg)
    local cpu_cores=$(nproc)
    cpu_usage=$(awk -v cores="$cpu_cores" 'BEGIN {load = getline < "/proc/loadavg" ? $1 : 0; printf "%.1f", (load / cores) * 100}')
    
    # 内存使用率计算
    memory_usage=$(free -b | awk '/Mem/ {used=$3; total=$2; if(total>0) printf "%.1f", used/total*100; else printf "0"}')
}

# 系统状态反馈函数
report_status() {
    local status_msg="当前状态: IO=${io_wait}% CPU=${cpu_usage}% MEM=${memory_usage}%"
    echo "$(date "+%Y-%m-%d %H:%M:%S") - ${status_msg}"
}

# 重启判断逻辑
check_and_restart() {
    # 使用awk进行浮点数比较
    local trigger_io=$(awk -v io="$io_wait" -v th="$IO_THRESHOLD" 'BEGIN {if (io > th) print 1; else print 0}')
    local trigger_cpu=$(awk -v cpu="$cpu_usage" -v th="$CPU_THRESHOLD" 'BEGIN {if (cpu > th) print 1; else print 0}')
    local trigger_mem=$(awk -v mem="$memory_usage" -v th="$MEMORY_THRESHOLD" 'BEGIN {if (mem > th) print 1; else print 0}')

    if [ "$trigger_io" -eq 1 ] || [ "$trigger_cpu" -eq 1 ] || [ "$trigger_mem" -eq 1 ]; then
        echo "$(date "+%Y-%m-%d %H:%M:%S") - 触发重启: IO=${io_wait}% CPU=${cpu_usage}% MEM=${memory_usage}%"
        
        if restart_mysql; then
            exit 0
        else
            exit 1
        fi
    else
        report_status
    fi
}

# 主执行流程
main() {
    if ! detect_mysql_environment; then
        echo "$(date "+%Y-%m-%d %H:%M:%S") - 错误: 无法确定My**L运行环境" >&2
        exit 1
    fi

    get_system_stats
    check_and_restart
    report_status
}

# 执行主函数
main
exit 0

验证容器名称是否正确
您也可以先验证一下容器名称:

# 查看所有运行的容器
docker ps

# 查看特定容器信息
docker inspect mysql_eazm-mysql_eazM-1

# 测试容器内的My**L
docker exec mysql_eazm-mysql_eazM-1 mysql --version

如果容器名称包含特殊字符的注意事项
如果容器名称包含连字符或其他特殊字符,可能需要确保:

  1. 名称完全匹配(包括大小写)
  2. 如果名称包含空格或特殊字符,可能需要用引号括起来


现在脚本应该能正确识别并重启您的宝塔Docker中的My**L容器了。

 

 

本文编辑:admin

更多文章:


现代网站favicon应该有哪些尺寸,favicon.ico需要多种尺寸来适配不同设备和平台

现代网站favicon应该有哪些尺寸,favicon.ico需要多种尺寸来适配不同设备和平台

现代网站favicon需要多种尺寸来适配不同设备和平台。以下是完整的尺寸要求和建议:核心必备尺寸尺寸格式用途优先级16×16ICO, PNG浏览器标签页、书签栏必需32×32ICO, PNG高DPI显示器、Windows任务栏必需180×1

2026年4月2日 10:47

sitemap无静态时怎么防止恶意访问,sitemap防御方法

sitemap无静态时怎么防止恶意访问,sitemap防御方法

sitemap无静态时怎么防止恶意访问,sitemap防御方法

2026年3月9日 16:01

宝塔Nginx免费防火墙常用UA防护正则

宝塔Nginx免费防火墙常用UA防护正则

垃圾UA屏蔽基础版(FeedDemon|Indy Library|Alexa Toolbar|Dalvik|AOLShield|ClaudeBot|Server 2012|Enterprise|LieBaoFast|Trailer|Agen

2026年1月20日 00:53

宝塔监测CPU IO的shell代码

宝塔监测CPU IO的shell代码

无docker版本#!/bin/bash # 阈值配置(生产环境建议调整) IO_THRESHOLD=70 # iowait百分比阈值(正常服务器通常&lt;30%) CPU_THRESHOLD=70 # CPU总使用率阈值(用户+系统)

2025年11月28日 17:01

uWSGI 所有配置属性有哪些?uWSGI的具体配置方法

uWSGI 所有配置属性有哪些?uWSGI的具体配置方法

uWSGI 的配置属性非常丰富,涵盖了进程管理、性能调优、日志记录、安全设置等多个方面。为了让你能快速了解,我将其核心属性整理成了一个表格。下面这个表格汇总了除了你提到的几个之外,其他一些常用且重要的配置属性及其作用。配置属性功能描述示例值

2025年11月15日 14:30

linux终端查看Nginx日志文件指定关键词,Nginx日志查找蜘蛛

linux终端查看Nginx日志文件指定关键词,Nginx日志查找蜘蛛

在宝塔面板中查看指定Nginx日志文件里百度蜘蛛的访问次数,可以通过几种方法实现。下面为你梳理了操作步骤。我们以查找/www/wwwlogs/djacorecms.log中百度蜘蛛🔍 使用宝塔面板内置日志查看器这是最直观的方法,适合不熟悉命

2025年10月11日 16:37

宝塔Nginx屏蔽UA,屏蔽Referer方法,宝塔NG补充免费防火墙方法

宝塔Nginx屏蔽UA,屏蔽Referer方法,宝塔NG补充免费防火墙方法

宝塔的Nginx免费防火墙好像对主要搜索引擎蜘蛛为放行的,但是在实际运营当中我们不一定什么搜索都需要。因为有的搜索就是蜘蛛玩命的来,就是不收录,还有的就是没啥流量死命的来蜘蛛。。搞的服务器压力多数来自于他们。我们是长久的使用宝塔界面来管理服

2025年9月21日 21:29

宝塔服务器部署Django提示mysqlclient未安装 ,宝塔libmariadb安装教程

宝塔服务器部署Django提示mysqlclient未安装 ,宝塔libmariadb安装教程

宝塔服务器部署Django提示mysqlclient未安装 ,宝塔libmariadb安装教程

2025年5月21日 22:10

最近更新

使用DRF快速搭建API接口,Django REST Framework ModelViewSet 用法总结
2026-03-01 09:10:09 浏览:4
宝塔Nginx免费防火墙常用UA防护正则
2026-01-20 00:53:21 浏览:38
django 使用selenium注意事项:Service /usr/local/bin/chromedriver unexpectedly exited. Status code was: 1解决办法
2026-01-06 00:58:37 浏览:10
Django移除模型后的content_type操作
2025-12-22 11:36:29 浏览:6
热门文章

DjancoreCMS打包前操作
2025-05-26 17:58:05 浏览:81
宝塔Nginx免费防火墙常用UA防护正则
2026-01-20 00:53:21 浏览:38
标签列表