本文目录导读:

我来分享几种用脚本监控硬件温度的方法,涵盖不同操作系统和需求:
🖥️ 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
💡 实用建议
-
安装必要的工具:
# Ubuntu/Debian sudo apt-get update sudo apt-get install lm-sensors hddtemp nvidia-smi sudo sensors-detect --auto
-
配置开机自启:
# 添加 cron 任务 crontab -e # 添加: */5 * * * * /path/to/temp_monitor.sh
-
保存监控数据:
# 记录到文件 echo "$(date) CPU: $cpu_temp°C" >> /var/log/temp_monitor.log
-
使用InfluxDB + Grafana:适合生产环境的专业监控方案
选择脚本时请注意:
- 内核支持:确保CPU驱动已正确加载
- 用户权限:某些命令需要root权限
- 硬件兼容性:不同品牌主板读取方式可能不同
需要我详细解释某个部分,或者帮你调试具体的监控脚本吗?