怎么用脚本监控硬件温度

wen 实用脚本 2

本文目录导读:

怎么用脚本监控硬件温度

  1. 🖥️ Linux 系统监控
  2. 🪟 Windows 系统监控
  3. 🍎 macOS 系统监控
  4. 📊 高级监控方案
  5. 💡 实用建议

我来分享几种用脚本监控硬件温度的方法,涵盖不同操作系统和需求:

🖥️ Linux 系统监控

使用 lm-sensors 基础监控

#!/bin/bash
# 硬件温度监控脚本 (Linux)
# 安装依赖
# sudo apt-get install lm-sensors
# sudo sensors-detect --auto
echo "=== CPU温度监控 ==="
sensors | grep -E "Package|Core|CPU"
echo "=== GPU温度监控 (NVIDIA) ==="
nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader
echo "=== 硬盘温度监控 ==="
# 需要安装 hddtemp
# sudo apt-get install hddtemp
hddtemp /dev/sda /dev/sdb 2>/dev/null

完整的实时监控脚本

#!/bin/bash
# monitor_temp.sh - 完整温度监控
while true; do
    clear
    echo "⌛ 监控时间: $(date '+%Y-%m-%d %H:%M:%S')"
    echo "================================"
    # CPU温度
    echo "🔥 CPU温度:"
    sensors | grep -E "Physical|Package|Core0" | \
        awk '{printf "  %s: %s\n", $1, $2}'
    # 主板温度
    echo -e "\n🔧 主板温度:"
    sensors | grep -E "SYSTIN|CPUTIN|AUXTIN" | \
        awk '{printf "  %s: %s\n", $1, $2}'
    # GPU温度
    if command -v nvidia-smi &> /dev/null; then
        echo -e "\n🎮 GPU温度:"
        nvidia-smi --query-gpu=name,temperature.gpu,utilization.gpu \
            --format=csv,noheader
    fi
    # 硬盘温度
    echo -e "\n💾 硬盘温度:"
    for disk in /dev/sd[a-z]; do
        if [ -e "$disk" ]; then
            temp=$(hddtemp "$disk" 2>/dev/null | awk '{print $4}')
            echo "  $disk: $temp"
        fi
    done
    sleep 5  # 每5秒刷新
done

温度告警脚本

#!/bin/bash
# temp_alert.sh - 温度超限告警
# 阈值设置
CPU_LIMIT=80     # CPU温度阈值(°C)
GPU_LIMIT=85     # GPU温度阈值(°C)
DISK_LIMIT=50    # 硬盘温度阈值(°C)
# 获取CPU温度
cpu_temp=$(sensors | grep "Package" | awk '{print $4}' | sed 's/+//;s/°C//')
# 获取GPU温度 (如果是NVIDIA)
gpu_temp=$(nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader)
# 磁盘温度
disk_temp=$(hddtemp /dev/sda 2>/dev/null | awk '{print $4}' | sed 's/°C//')
# 告警逻辑
check_temp() {
    local name=$1
    local temp=$2
    local limit=$3
    if (( $(echo "$temp > $limit" | bc -l) )); then
        echo "🚨 警告: $name 温度过高! 当前: ${temp}°C, 阈值: ${limit}°C"
        # 可以添加邮件/短信通知
        # echo "温度告警" | mail -s "服务器温度告警" admin@example.com
    else
        echo "✅ $name 温度正常: ${temp}°C"
    fi
}
# 执行检查
check_temp "CPU" "$cpu_temp" $CPU_LIMIT
check_temp "GPU" "$gpu_temp" $GPU_LIMIT
check_temp "磁盘" "$disk_temp" $DISK_LIMIT

🪟 Windows 系统监控

PowerShell 脚本

# 使用 WMI 获取温度
Get-WmiObject -Namespace "root/wmi" -Query "SELECT * FROM MSAcpi_ThermalZoneTemperature" | 
    ForEach-Object {
        $temp = ($_.CurrentTemperature / 10) - 273.15
        Write-Host "CPU温度: $([math]::Round($temp, 2))°C"
    }
# 使用第三方工具 (需安装 OpenHardwareMonitor)
$temp = Get-Content "C:\Program Files\OpenHardwareMonitor\HardwareMonitor.exe" -ErrorAction SilentlyContinue

完整的监控脚本

# monitor_temp.ps1
# 需要安装: 
# 1. OpenHardwareMonitor (开源硬件监控)
# 2. 配置其日志导出功能
$logFile = "D:\temp_monitor.log"
while ($true) {
    Clear-Host
    Write-Host "=== 实时温度监控 ===" -ForegroundColor Green
    Write-Host "时间: $(Get-Date)"
    # 读取 OpenHardwareMonitor 输出
    $data = Get-Content "C:\temp_data\temp_output.txt" -Tail 10
    foreach ($line in $data) {
        Write-Host $line -ForegroundColor Yellow
    }
    # 日志记录
    Add-Content $logFile "$(Get-Date): $data"
    Start-Sleep -Seconds 5
}

🍎 macOS 系统监控

#!/bin/bash
# macOS 温度监控
# 使用 powermetrics (需要 sudo)
echo "=== 温度监控 ==="
sudo powermetrics --samplers smc -n1 | grep -E "CPU die temperature|GPU die temperature"
# 或使用第三方工具 osx-cpu-temp
if command -v osx-cpu-temp &> /dev/null; then
    osx-cpu-temp
fi
# 简化版本 - 使用 iStats gem
# gem install iStats
istats | grep -E "CPU|GPU"

📊 高级监控方案

带GUI的监控脚本 (Python)

#!/usr/bin/env python3
# temp_monitor.py
import psutil
import time
import tkinter as tk
from tkinter import ttk
def get_temperatures():
    """获取系统温度"""
    temps = {}
    try:
        # CPU温度 (Linux)
        for name, entries in psutil.sensors_temperatures().items():
            if name == 'coretemp':
                temps['CPU'] = entries[0].current
        temps['CPU'] = temps.get('CPU', 'N/A')
    except:
        temps['CPU'] = 'N/A'
    return temps
def update_display():
    """更新显示"""
    temps = get_temperatures()
    temp_label.config(text=f"CPU温度: {temps['CPU']}°C")
    root.after(1000, update_display)
# 创建GUI
root = tk.Tk()"温度监控")
root.geometry("300x200")
temp_label = ttk.Label(root, text="", font=("Arial", 24))
temp_label.pack(pady=50)
update_display()
root.mainloop()

Web远程监控

# 结合 websocket 和温度监控
#!/bin/bash
# web_temp_monitor.sh
# 简单Web服务器推送温度数据
while true; do
    temp_data=$(sensors | grep "Package" | awk '{print $4}')
    # 生成 HTTP 响应
    printf "HTTP/1.1 200 OK\nContent-Type: text/plain\n\n"
    printf "当前CPU温度: %s°C\n" $temp_data
    sleep 2
done | nc -l -p 8080

💡 实用建议

  1. 安装必要的工具

    # Ubuntu/Debian
    sudo apt-get update
    sudo apt-get install lm-sensors hddtemp nvidia-smi
    sudo sensors-detect --auto
  2. 配置开机自启

    # 添加 cron 任务
    crontab -e
    # 添加: */5 * * * * /path/to/temp_monitor.sh
  3. 保存监控数据

    # 记录到文件
    echo "$(date) CPU: $cpu_temp°C" >> /var/log/temp_monitor.log
  4. 使用InfluxDB + Grafana:适合生产环境的专业监控方案

选择脚本时请注意:

  • 内核支持:确保CPU驱动已正确加载
  • 用户权限:某些命令需要root权限
  • 硬件兼容性:不同品牌主板读取方式可能不同

需要我详细解释某个部分,或者帮你调试具体的监控脚本吗?

抱歉,评论功能暂时关闭!