Linux无内置温度触发暂停机制,但可通过传感器监控、脚本调度与进程管理实现:实时读温→超阈值降频并停高负载进程→降温后恢复。

Linux本身不内置“温度触发任务暂停”的机制,但可以通过组合传感器监控、进程管理与脚本调度实现这一效果。核心思路是:实时读取温度 → 达阈值时主动降低负载 → 温度回落后再恢复。整个过程无需内核修改,全部基于用户态工具完成。
一、确认并持续监控CPU温度
先确保系统能准确读取温度数据:
- 安装 lm-sensors 并运行
sensors-detect(按提示一路回车,启用所有探测项); - 执行
sensors查看输出,确认有类似Package id 0: +72.0°C (high = +80.0°C, crit = +100.0°C)的行; - 若无输出,检查是否加载了对应驱动(如
coretemp对 Intel,k10temp对 AMD),可用lsmod | grep temp验证; - 为方便脚本调用,建议用
cat /sys/class/thermal/thermal_zone0/temp(单位为毫摄氏度,如78500表示 78.5℃)作为稳定读取源。
二、编写温度响应脚本
创建一个可执行脚本(例如 /usr/local/bin/temp-throttle.sh),内容如下:
#!/bin/bash TEMP_FILE="/sys/class/thermal/thermal_zone0/temp" THRESHOLD=85000 # 触发降温的温度阈值(单位:毫℃) COOL_DOWN_CMD="cpupower frequency-set -u 1.2GHz" # 限制最大频率 RESTORE_CMD="cpupower frequency-set -u 100%" # 恢复全频 PID_FILE="/tmp/highload_pid" <h1>检查当前温度</h1><p>CURRENT=$(cat "$TEMP_FILE" 2>/dev/null || echo "0") if [ "$CURRENT" -gt "$THRESHOLD" ]; then</p><h1>若尚未限频,执行降频并记录状态</h1><p>if ! pgrep -f "cpupower.*1.2GHz" >/dev/null; then $COOL_DOWN_CMD 2>/dev/null</p><h1>可选:记录被暂停的高负载进程PID(如渲染、编译类)</h1><pre class="brush:php;toolbar:false;">pgrep -f "ffmpeg\|gcc\|make\|python.*train" > "$PID_FILE" 2>/dev/null for pid in $(cat "$PID_FILE" 2>/dev/null); do kill -STOP "$pid" 2>/dev/null done
fi else
温度正常,尝试恢复
$RESTORE_CMD 2>/dev/null if [ -f "$PID_FILE" ]; then for pid in $(cat "$PID_FILE"); do kill -CONT "$pid" 2>/dev/null done rm -f "$PID_FILE" fi fi
保存后赋予执行权限:chmod +x /usr/local/bin/temp-throttle.sh
三、设置定时轮询(推荐每10秒一次)
用 systemd timer 实现可靠轮询,避免 crontab 精度不足或环境变量缺失问题:
- 新建定时器单元:
/etc/systemd/system/temp-monitor.timer:
[Unit] Description=Monitor CPU temperature and throttle if hot <p>[Timer] OnUnitActiveSec=10 Persistent=true</p><p>[Install] WantedBy=timers.target
- 新建对应服务单元:
/etc/systemd/system/temp-monitor.service:
[Unit] Description=CPU Temperature Throttling Service After=multi-user.target <p>[Service] Type=oneshot ExecStart=/usr/local/bin/temp-throttle.sh User=root
- 启用并启动:
systemctl daemon-reload && systemctl enable --now temp-monitor.timer。
四、补充建议:让关键任务更“温顺”
仅靠外部干预不够稳健,建议从任务自身优化入手:
- 对长时间运行的计算任务(如
ffmpeg,rsync,find -exec),加nice -n 10和ionice -c 3降低优先级; - 使用
cpulimit限制单个进程CPU占用率(如cpulimit -p $PID -l 60限制为60%); - 在脚本开头加入温度预检逻辑,例如:
[[ $(cat /sys/class/thermal/thermal_zone0/temp) -gt 80000 ]] && exit 1,避免高温下启动新重载任务。
这套方案不依赖第三方守护进程,轻量可控,且在多数主流发行版(Ubuntu/CentOS/RHEL/Debian)上开箱即用。关键是把“检测—响应—恢复”闭环做实,而不是等待系统崩溃再抢救。


















