c68d8fa37b55646

在利用PVE打造ALL IN ONE主机的时候,经常会担心因为CPU、硬盘温度过高导致性能受到影响。如果能在PVE在web界面上显示温度就能非常利于我们对设备温度的监控。下面就是让PVE显示CPU温度的详细步骤。

准备工作:

1、提前准备WinSCP,用来修改PVE的系统文件。
2、备份PVE中下面两个文件:

/usr/share/perl5/PVE/API2/Nodes.pm
/usr/share/pve-manager/js/pvemanagerlib.js

操作步骤:

、安装插件

1、安装sensors插件
打开PVE界面中的>_Shell ,执行命令: apt-get install lm-sensors
c0ed4b7a73c973b
2、选择Y安装sensors
d581a02049d2c3d
3、传感器探测,命令:sensors-detect
6aa9b055328d74b
(通常情况下全部按默认选择 Y 即可,直到传感器检测完成,最后按 回车键 即可)
e900991ff577cb6
4、测试打印传感器数据
执行sensors,会打印出主板温度、封装温度、核心温度、风扇转速等,实际取决于可用的传感器,但核心温度基本都有。
后面我们会使用sensors -j这个命令,输出JSON解析方便。
4e1d5da00c0fcb9
5、安装hddtemp
执行apt-get install hddtemp安装,可能需要良好网络环境。
de5a27b4943f27d

5、测试打印硬盘温度
执行hddtemp /dev/sd?看是否能打印出设备温度。
如果没有的话,可以执行lsblk看看是不是有nvme的设备,更换一下命令后面的设备名试一下,如果不行就需要用smartctl之类的工具获取温度了。
6、允许普通用户运行hddtemp
如果后续无法在web页面上显示硬盘温度,则需要执行此步骤。执行chmod +s /usr/sbin/hddtemp,这将允许所有用户以root身份执行此文件。默认情况下,pveproxy似乎是以www-data

配置页面

1、编辑pm文件
编辑/usr/share/perl5/PVE/API2/Nodes.pm,搜索pveversion快速直达此部分。添加如下代码。

...
        $res->{thermal_cpu} = `sensors -j`; #JSON格式输出传感器数据
        $res->{thermal_hdd} = `hddtemp /dev/sd?`; # 获取硬盘温度
...

d9e8ca511db7555

2、编辑js文件
编辑/usr/share/pve-manager/js/pvemanagerlib.js
第一部分,修改显示框高度。搜索pveNodeStatus快速直达此部分。此处建议先加100,然后根据效果以20为单位修改。

...
Ext.define('PVE.node.StatusView', {
extend: 'Proxmox.panel.StatusView',
alias: 'widget.pveNodeStatus',

height: 380, // 增加这行的值,原始值300
bodyPadding: '15 5 15 5',
...

第二部分,增加内容块。搜索pveversion快速直达此部分。此处可以直接根据js语法修改

...
        {
            itemId: 'version',
            colspan: 2,
            printBar: false,
            title: gettext('PVE Manager Version'),
            textField: 'pveversion',
            value: '',
        },
        // ======== 从这里开始是添加的内容(缩进和换行不重要) ========
        {
            itemId: 'thermal-cpu', // 这个值不重要,但别和别的itemId重复了
            colspan: 2,
            printBar: false,
            title: gettext('CPU Temperature'), // 字段显示标题,可自行修改
            textField: 'thermal_cpu', // 这里的值和前面的pm文件对应
            renderer: function(value) {
                value = JSON.parse(value);
                const c0 = value['coretemp-isa-0000']['Core 0']['temp2_input'].toFixed(1);
                const c1 = value['coretemp-isa-0000']['Core 1']['temp3_input'].toFixed(1);
                const c2 = value['coretemp-isa-0000']['Core 2']['temp4_input'].toFixed(1);
                const c3 = value['coretemp-isa-0000']['Core 3']['temp5_input'].toFixed(1);
                return `CPU核心温度: ${c0}℃ | ${c1}℃ | ${c2}℃ | ${c3}`;
            }
        },
        {
            itemId: 'thermal-hdd',
            colspan: 2,
            printBar: false,
            title: gettext('HDD Temperature'),
            textField: 'thermal_hdd',
            renderer: function(value) {
                value = value.replaceAll('Â', ''); // 硬盘输出的结果在摄氏度前面确实有这个乱码,替换一下
                return value.replaceAll('\n', '<br/>');
            }
        },
        // ======== 添加的内容到这里结束 ========
    ],
...

3、重启pveproxy服务
执行systemctl restart pveproxy,浏览器刷新如果不生效,记得清空缓存再刷新。
4、效果
到此就可看到CPU的温度,老猫用的硬盘没有传感器所以无法显示温度。

d2adfb67def6434

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。