Contents
安装温度检测工具
CPU 及主板温度检测:lm-sensors
user@pve:~$ sudo apt install lm-sensors
安装完成后执行 sensors-detect
进行传感器探测,通常情况下全部按默认选择 yes 即可
探测完成后执行 sensors -j
测试传感器(参数 -j
使其以 JSON 格式输出)
user@pve:~$ sensors -j
{
"coretemp-isa-0000":{
"Adapter": "ISA adapter",
"Package id 0":{
"temp1_input": 69.000,
"temp1_max": 84.000,
"temp1_crit": 100.000,
"temp1_crit_alarm": 0.000
},
"Core 0":{
"temp2_input": 69.000,
"temp2_max": 84.000,
"temp2_crit": 100.000,
"temp2_crit_alarm": 0.000
},
// ...[OMITTED]...
},
"acpitz-acpi-0":{
"Adapter": "ACPI interface",
"temp1":{
"temp1_input": 68.000,
"temp1_crit": 120.000
}
}
}
在如上输出中,['acpitz-acpi-0']['temp1']['temp1_input']
是主板温度,['coretemp-isa-0000']['Package id 0']['temp1_input']
是 CPU 温度
硬盘温度检测:hddtemp
user@pve:~$ sudo apt install hddtemp
安装完成后执行 hddtemp /dev/sd?
测试传感器
user@pve:~$ sudo hddtemp /dev/sd?
/dev/sda: WDC WD40EZRZ-00WN9B0: 29°C
/dev/sdb: ADATA SP600: 26°C
/dev/sdc: WD2500: 29°C
/dev/sdd: ADATA SP900: 38°C
由于 PVE 的 web 服务以用户 www-data 身份运行,需要修改 hddtemp 的权限
user@pve:~$ sudo chmod +s /usr/sbin/hddtemp
编辑 PVE web 服务文件
Nodes.pm
编辑文件 /usr/share/perl5/PVE/API2/Nodes.pm
,跳转到 my $dinfo = df('/', 1);
位置,编辑成如下所示
# ...[OMITTED]...
$res->{pveversion} = PVE::pvecfg::package() . "/" .
PVE::pvecfg::version_text();
$res->{thermal} = `sensors -j`; # 添加此行以获取 CPU 与主板等温度
$res->{thermal_hdd} = `hddtemp /dev/sd?`; # 添加此行以获取硬盘温度
my $dinfo = df('/', 1); # output is bytes
# ...[OMITTED]...
pvemanagerlib.js
修改页面样式以完整显示数据
编辑文件 /usr/share/pve-manager/js/pvemanagerlib.js
,跳转到 gettext('Status') + ': ' + zpool,
位置,编辑成如下所示
// ...[OMITTED]...
var win = Ext.create('Ext.window.Window', {
modal: true,
width: 800,
height: 500, // 原始值为 400
resizable: true,
layout: 'fit',
title: gettext('Status') + ': ' + zpool,
items:[{
// ...[OMITTED]...
跳转到 widget.pveNodeStatus
位置,编辑成如下所示
// ...[OMITTED]...
Ext.define('PVE.node.StatusView', {
extend: 'PVE.panel.StatusView',
alias: 'widget.pveNodeStatus',
height: 400, // 原始值为 300
bodyPadding: '20 15 20 15',
layout: {
// ...[OMITTED]...
两处 height
的值需按情况修改,每多一行数据增加 20
例如有 1 行 CPU 与主板温度数据、3 行硬盘温度数据(3 块硬盘),即为 480 与 380
添加显示内容
跳转到 PVE Manager Version
位置,编辑成如下所示
// ...[OMITTED]...
{
itemId: 'version',
colspan: 2,
printBar: false,
title: gettext('PVE Manager Version'),
textField: 'pveversion',
value: ''
}, // 注意添加逗号
{
itemId: 'thermal',
colspan: 2,
printBar: false,
title: gettext('Thermal Status'),
textField: 'thermal',
renderer: function(value) {
value = JSON.parse(value.replaceAll('Â', ''));
const cpu0 = value['coretemp-isa-0000']['Package id 0']['temp1_input'].toFixed(1);
const board = value['acpitz-acpi-0']['temp1']['temp1_input'].toFixed(1);
// ...获取其他传感器数据
return `CPU: ${cpu0}°C | Board: ${board}°C`; // 自行修改输出格式
}
},
{
itemId: 'thermal-hdd',
colspan: 2,
printBar: false,
title: gettext('HDD Thermal Status'),
textField: 'thermal_hdd',
renderer: function(value) {
value = value.replaceAll('Â', '');
return value.replaceAll('\n', '<br>');
}
}
],
// ...[OMITTED]...
其中获取 JSON 数值的表达式(value['...']...['...'].toFixed(1))与最后输出字符串(result)的格式需按实际情况和需求进行修改
完成
执行 systemctl restart pveproxy
重启 PVE web 服务
在浏览器中清除 PVE 控制台的缓存,重新加载即可在节点概要显示温度信息
45 Comments
goohoo · 2020-01-31 at 21:38
请问‘value = value.replace(/Â/g, '');’添加在什么地方啊,硬盘温度确实出现 “” 字符了,感谢!
Admin · 2020-02-06 at 12:26
goohoo · 2020-02-06 at 12:52
感谢大佬,OK
Gavin · 2020-02-02 at 01:29
Thanks, 按照操作加上了温度。 主要我CPU是2 cores,调整了一下js的代码,感谢哈!
zhlgdl · 2020-03-08 at 18:46
我按照这个教程做了,但还是无法显示,我的是5.4.3,硬盘那个感测程序也是无法下载
Admin · 2020-03-13 at 17:43
无法下载是指 apt install 出错?
yexusky · 2020-03-17 at 07:21
6.1-8 最新版本不行了 显示不了cpu温度和硬盘都显示不了
Admin · 2020-03-17 at 13:40
刚刚更新后试了一下可以正常显示,建议清理一下网页资源缓存,可能是那个 JS 有缓存导致不展示
朱俊 · 2020-03-23 at 08:01
我一直是显示载入中6.1.3我是哪里设置错误了吗
Admin · 2020-03-30 at 03:38
我猜是语法错误 文件里漏了逗号或分号之类的情况
Ganas · 2020-04-21 at 05:47
大佬,我的sensors显示如下,按你的正则,主板温度那个语句应该是不行,求指点,改怎么改?正则真的是一窍不通。感谢大佬!
soc_dts0-virtual-0
Adapter: Virtual device
temp1: +46.0°C
acpitz-acpi-0
Adapter: ACPI interface
temp1: +26.8°C (crit = +90.0°C)
soc_dts1-virtual-0
Adapter: Virtual device
temp1: +47.0°C
coretemp-isa-0000
Adapter: ISA adapter
Core 0: +45.0°C (high = +105.0°C, crit = +105.0°C)
Core 1: +45.0°C (high = +105.0°C, crit = +105.0°C)
Core 2: +46.0°C (high = +105.0°C, crit = +105.0°C)
Core 3: +46.0°C (high = +105.0°C, crit = +105.0°C)
Admin · 2020-04-26 at 19:12
将
const b0
的正则改为 “/^acpitz-acpi-\d+\n.*\ntemp1.*?+([\d.]+)?/m”k2s · 2021-09-26 at 04:50
大佬您好,我这边也是有2个temp1,我用你的这个正则不行,,求解答,谢谢。
it8772-isa-0a40
Adapter: ISA adapter
temp1: -7.0°C (low = -128.0°C, high = +127.0°C) sensor = thermistor
intrusion0: ALARM
acpitz-acpi-0
Adapter: ACPI interface
temp1: +44.0°C (crit = +95.0°C)
const b0 = value.match(/^acpitz-acpi-\d+\n.\ntemp1.?+([\d.]+)?/m)[1];
zry98 · 2021-09-26 at 05:58
直接使用
sensors -j
输出的 json 数据吧,已修改文章幸福的井底蛙 · 2020-05-16 at 18:09
改完,如果更新了pve,然后就。。。。。没了::>_<::
幸福的井底蛙 · 2020-05-16 at 19:46
在pve6.2.4上失效了,修改后pve web就打不开了
Admin · 2020-07-04 at 10:34
是的 每次更新PVE会覆盖文件
mycsun · 2020-06-01 at 04:55
6.2-4改了,不显示出不了!!!
li · 2020-07-01 at 01:22
我的6.2-4在进入编辑文件 /usr/share/perl5/PVE/API2/Nodes.pm,跳转到 my $dinfo = df('/', 1); 位置,无法跳转快捷键是什么
li · 2020-07-01 at 17:33
编辑文件 /usr/share/perl5/PVE/API2/Nodes.pm,跳转到 my $dinfo = df('/', 1); 位置,编辑成如下所示 大佬能指点下怎么快捷键跳转吗 我的版本6.2-4全部按遍了也都没反应
Admin · 2020-07-04 at 10:33
如果用的是vim 就是按“/” 然后输入“my $dinfo = df('/', 1);” 然后回车
失落的表白 · 2020-07-03 at 01:14
我一直是显示载入中6.2.4我是哪里设置错误了吗?怎么联系你,帮我修改一下
Admin · 2020-07-04 at 10:31
应该是漏了逗号引号之类的情况
coco · 2020-07-04 at 12:44
大佬,我的sensors显示如下,我没有主板的的温度就不要了,但是我有张i350 PCI的独立网卡,怎么显示这网卡温度呢,我自己试着在你的那个函数上把主板的改成我网卡的但是没成功,求回答
root@pve:~# sensors
i350bb-pci-0100
Adapter: PCI adapter
loc1: +55.0°C (high = +120.0°C, crit = +110.0°C)
coretemp-isa-0000
Adapter: ISA adapter
Package id 0: +46.0°C (high = +90.0°C, crit = +94.0°C)
Core 0: +47.0°C (high = +90.0°C, crit = +94.0°C)
Core 1: +46.0°C (high = +90.0°C, crit = +94.0°C)
Core 2: +41.0°C (high = +90.0°C, crit = +94.0°C)
Core 3: +43.0°C (high = +90.0°C, crit = +94.0°C)
Admin · 2021-02-03 at 09:01
把原文获取主板温度那边的正则改成
/^loc1: \+([^°]+).*$/m
,另外的格式你自己改一下就行了BigLilo · 2020-07-05 at 08:16
感谢作者
为啥我根据你的方法增加硬盘温度显示为空,我只有1块硬盘,为/dev/sda
请问如何修改下?
Biglio · 2020-07-05 at 08:24
感谢作者
找到原因了,忘了给hddtemp 加权限。
打扰了。
zjdxsj · 2020-07-31 at 23:30
我也是最新版6.2.4,改完之后web界面一片空白,然后删除改动的,还原回去还是一片空白。没有备份原始文件,如何修复啊 。。撑到下一次更新能恢复吗,求大神指点
Admin · 2021-02-03 at 09:05
一般PVE更新的时候会被新版本文件覆盖
jiang · 2020-09-22 at 01:25
我改完以后一直显示载入中
Admin · 2021-02-03 at 09:04
一般是脚本里有语法错误
jingsheng · 2020-11-22 at 01:21
Virtual Environment 6.2-4
修改后,那个显示CPU温度与硬盘那一直在转圈,但是CPU IO那些占用都还会刷新的
CPU温度跟硬盘温度不显示
Admin · 2021-02-03 at 08:53
应该是脚本有地方写错了,建议拷出来用带语法检查的编辑器修改
uioprr · 2021-02-02 at 21:11
非常感谢博主的分享,请教一下,我不是码农研究了一下,想把CPU温度和HDD温度显示在一行中
怎么用正则取硬盘的温度:返回值是:/dev/sda: Asgard AS2TS3-S7: 46°C,只需要取中间的46。
Admin · 2021-02-03 at 08:51
^\/dev.*: (\d+)°C$/m
这样应该可以
k2s · 2021-09-24 at 16:50
大佬你好,我想显示风扇的转速,但我用了其他教程的js代码,结果不行。。是不是正则写得不对?获取CPU主板温度是可以的,求解答。
fan1: 0 RPM (min = 0 RPM)
fan2: 0 RPM (min = 0 RPM)
const f0 = value.match(/fan1.*?+([\d.]+)?/)[1];
zry98 · 2021-09-25 at 00:51
可以试试
/fan1:.*([\d.]+) R/
张飞 · 2021-11-25 at 07:23
title: gettext('风扇转速'),
textField: 'thermalstate',
renderer:function(value){
const f1 = value.match(/fan2:.([\d.]+) R/)[1];
const f2 = value.match(/fan4:.([\d.]+) R/)[1];
return
CPU风扇: ${f1}RPM | 机箱风扇: ${f2}RPM
不显示速度,只显示0
张飞 · 2021-11-25 at 07:26
还有个问题就是,2块nvme,显示出来的都是Composite:,如何把2块nvme温度都显示出来呢?
nvme-pci-0100
Adapter: PCI adapter
Composite: +34.9°C (low = -5.2°C, high = +79.8°C)
nvme-pci-0200
Adapter: PCI adapter
Composite: +39.9°C (low = -5.2°C, high = +79.8°C)
zry98 · 2021-11-25 at 18:03
建议使用
sensors -j
的 JSON 输出,更容易使用fwq · 2021-11-27 at 06:24
PVE7.11用不了,提示/dev/sda: Permission denied
zry98 · 2021-11-27 at 18:27
和 PVE 没关系,改 hddtemp 权限
sudo chmod +s /usr/sbin/hddtemp
wish · 2022-06-01 at 23:42
大佬,问下输出传感器参数
return
XXXXXXXXXXXXXXX
;里面,多个数据如何换行显示
zry98 · 2022-06-02 at 12:30
用
<br>
换行Luo · 2022-12-30 at 16:39
找了好多终于找到了能显示硬盘温度的了,原来是hddtemp权限的问题