本文目录导读:

我来帮你编写监控风扇转速的脚本,根据不同操作系统,这里提供几种方案:
Linux 系统
使用 lm-sensors(推荐)
#!/bin/bash
# fan_monitor.sh - 监控风扇转速
# 安装依赖(如果需要)
# sudo apt-get install lm-sensors
# sudo sensors-detect
# 风扇速度阈值
FAN_THRESHOLD=500 # RPM
while true; do
# 获取风扇转速
fan_speed=$(sensors | grep -i "fan" | awk '{print $2}' | head -1)
# 检查是否为空
if [ -z "$fan_speed" ]; then
echo "无法获取风扇信息"
else
echo "当前风扇转速: ${fan_speed} RPM"
# 检查是否低于阈值
if [ "$fan_speed" -lt "$FAN_THRESHOLD" ] 2>/dev/null; then
echo "警告: 风扇转速过低!"
# 可以在这里添加发送警报的代码
fi
fi
sleep 5
done
读取 /sys/class 接口
#!/bin/bash
# fan_monitor_sys.sh
# 查找所有风扇设备
for fan in /sys/class/hwmon/hwmon*/fan*_input; do
if [ -f "$fan" ]; then
speed=$(cat "$fan")
name=$(echo "$fan" | grep -oP 'hwmon\d+/fan\d+')
echo "$name: ${speed} RPM"
fi
done
# 持续监控
while true; do
clear
echo "=== 风扇监控 ==="
echo "时间: $(date)"
echo ""
for fan in /sys/class/hwmon/hwmon*/fan*_input; do
if [ -f "$fan" ]; then
speed=$(cat "$fan")
name=$(echo "$fan" | grep -oP 'fan\d+')
echo "风扇 $name: ${speed} RPM"
fi
done
sleep 2
done
Windows 系统
PowerShell 脚本
# fan_monitor.ps1
# 使用WMI获取风扇信息
function Get-FanSpeed {
try {
# 获取风扇信息
$fans = Get-WmiObject -Namespace "root\wmi" -Class "FanSpeed" -ErrorAction Stop
if ($fans) {
foreach ($fan in $fans) {
$speed = $fan.CurrentSpeed
Write-Host "风扇 $($fan.InstanceName): ${speed} RPM"
# 阈值检查
if ($speed -lt 500) {
Write-Host "警告: 风扇转速过低!" -ForegroundColor Red
}
}
} else {
Write-Host "未检测到风扇信息"
}
}
catch {
Write-Host "无法访问风扇信息: $($_.Exception.Message)"
}
}
# 持续监控
while ($true) {
Clear-Host
Write-Host "=== 风扇监控 ==="
Write-Host "时间: $(Get-Date)"
Write-Host ""
Get-FanSpeed
Start-Sleep -Seconds 5
}
使用 SpeedFan 命令行工具
@echo off
REM fan_monitor.bat
REM 需要先安装 SpeedFan:https://www.almico.com/speedfan.php
:loop
cls
echo === 风扇监控 ===
echo 时间: %date% %time%
echo.
REM 使用 SpeedFan 命令行
speedfan /s
REM 或者读取日志文件
if exist "C:\Program Files (x86)\SpeedFan\sf_log.csv" (
type "C:\Program Files (x86)\SpeedFan\sf_log.csv" | findstr "FAN"
)
ping -n 5 127.0.0.1 > nul
goto loop
跨平台 Python 脚本
#!/usr/bin/env python3
# fan_monitor.py
import platform
import subprocess
import time
import re
def get_linux_fan_speed():
"""Linux系统获取风扇转速"""
try:
# 使用sensors命令
result = subprocess.run(['sensors'], capture_output=True, text=True)
if result.returncode == 0:
fans = []
for line in result.stdout.split('\n'):
if 'fan' in line.lower():
match = re.search(r'(\d+)\s*RPM', line)
if match:
fans.append(int(match.group(1)))
return fans
except:
pass
return []
def get_windows_fan_speed():
"""Windows系统获取风扇转速"""
try:
import wmi
c = wmi.WMI(namespace="root\\wmi")
fans = []
for fan in c.FanSpeed():
fans.append(fan.CurrentSpeed)
return fans
except:
pass
return []
def main():
"""主监控函数"""
system = platform.system().lower()
print(f"风扇监控 - 运行在 {system}")
print("=" * 40)
while True:
if system == 'linux':
fan_speeds = get_linux_fan_speed()
elif system == 'windows':
fan_speeds = get_windows_fan_speed()
else:
print("不支持的操作系统")
break
if fan_speeds:
for i, speed in enumerate(fan_speeds):
print(f"风扇 {i+1}: {speed} RPM")
# 阈值报警
if speed < 500:
print(f"⚠ 警告: 风扇 {i+1} 转速过低!")
else:
print("无法获取风扇信息")
print("-" * 40)
time.sleep(5)
if __name__ == "__main__":
main()
高级功能脚本
带日志记录和报警的完整脚本
#!/bin/bash
# fan_monitor_complete.sh
# 配置
LOG_FILE="/var/log/fan_monitor.log"
THRESHOLD=500
ALERT_EMAIL="admin@example.com"
# 初始化日志
init_log() {
touch "$LOG_FILE"
echo "===== 风扇监控日志 - $(date) =====" >> "$LOG_FILE"
}
# 记录日志
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}
# 发送警报
send_alert() {
local message="$1"
echo "$message" | mail -s "风扇转速警报" "$ALERT_EMAIL"
}
# 监控函数
monitor_fans() {
while true; do
# 获取风扇信息
sensors_output=$(sensors 2>/dev/null)
if [ $? -ne 0 ]; then
log "错误: 无法运行sensors命令"
sleep 10
continue
fi
# 解析风扇信息
echo "$sensors_output" | grep -i "fan" | while read line; do
speed=$(echo "$line" | grep -oP '\d+' | head -1)
name=$(echo "$line" | awk -F: '{print $1}')
if [ -n "$speed" ]; then
log "风扇 $name: ${speed} RPM"
# 检查阈值
if [ "$speed" -lt "$THRESHOLD" ]; then
log "警告: 风扇 $name 转速过低! (${speed} < ${THRESHOLD})"
send_alert "风扇 $name 转速过低! 当前: ${speed} RPM"
fi
fi
done
sleep 5
done
}
# 主函数
main() {
# 检查权限
if [ "$(id -u)" -ne 0 ]; then
echo "请以root用户运行此脚本"
exit 1
fi
# 初始化
init_log
log "开始监控风扇"
# 处理信号
trap "log '监控停止'; exit 0" SIGINT SIGTERM
# 启动监控
monitor_fans
}
main
使用说明
安装依赖
Linux:
# Ubuntu/Debian sudo apt-get install lm-sensors sudo sensors-detect # CentOS/RHEL sudo yum install lm_sensors sudo sensors-detect
Windows:
- 需要管理员权限运行PowerShell
- 可能需要安装SpeedFan
运行脚本
# Linux chmod +x fan_monitor.sh ./fan_monitor.sh # Python版本 python3 fan_monitor.py # Windows PowerShell Set-ExecutionPolicy RemoteSigned .\fan_monitor.ps1
选择适合你系统的版本,必要时调整阈值和告警设置。