美文网首页
PVE 7.3 网页上显示CPU和硬盘温度(以及硬盘温度不显示的

PVE 7.3 网页上显示CPU和硬盘温度(以及硬盘温度不显示的

作者: xun66 | 来源:发表于2023-09-26 00:51 被阅读0次

背景

最近把机器放进柜子,需要关注CPU温度决定是否更换风扇。需要在web界面上显示温度(命令行也可查询)。

我的pve版本:pve-manager/7.3-3
CPU:J4125

步骤

这里仅记录主要步骤和一些不一样的地方,其他详细步骤请查看网上其他教程或参考链接。遇到问题主要有两个:

  1. 遇到了hddtemp没有拿到结果,硬盘温度不显示的问题。由pve用户权限不足引起,通过set +s解决。
  2. 更新完代码,刷新网页没有生效。发现清理网页缓存再刷新就可以了。(可以用DevTools,或自行搜索教程)

准备工作

  1. 安装Sensors
    执行apt-get install lm-sensors安装,可能需要良好网络环境。
  2. 运行传感器检测(某些情况下可选)
    执行sensors-detect,一般来说一路回车即可。
  3. 测试打印传感器数据
    执行sensors,会打印出主板温度、封装温度、核心温度、风扇转速等,实际取决于可用的传感器,但核心温度基本都有。后面我们会使用sensors -j这个命令,输出JSON解析方便。
  4. 安装hddtemp
    执行apt-get install hddtemp安装,可能需要良好网络环境。
  5. 测试打印硬盘温度
    执行hddtemp /dev/sd?看是否能打印出设备温度。
    如果没有的话,可以执行lsblk看看是不是有nvme的设备,更换一下命令后面的设备名试一下,如果不行就需要用smartctl之类的工具获取温度了。
  6. 允许普通用户运行hddtemp(可选)
    如果后续无法在web页面上显示硬盘温度,则需要执行此步骤。执行chmod +s /usr/sbin/hddtemp,这将允许所有用户以root身份执行此文件。默认情况下,pveproxy似乎是以www-data身份执行的,这样获取不到内容。

配置页面

  1. 备份文件
cp /usr/share/perl5/PVE/API2/Nodes.pm /usr/share/perl5/PVE/API2/Nodes.pm.bak
cp /usr/share/pve-manager/js/pvemanagerlib.js /usr/share/pve-manager/js/pvemanager
  1. 编辑pm文件
    编辑/usr/share/perl5/PVE/API2/Nodes.pm,搜索pveversion快速直达此部分。新增了两行,如下代码块所示。
...
        $res->{swap} = {
            free => $meminfo->{swapfree},
            total => $meminfo->{swaptotal},
            used => $meminfo->{swapused},
        };

        $res->{pveversion} = PVE::pvecfg::package() . "/" .
            PVE::pvecfg::version_text();

        $res->{thermal_cpu} = `sensors -j`; # <---这行新增
        $res->{thermal_hdd} = `hddtemp /dev/sd?`; # <---这行新增

        my $dinfo = df('/', 1);

        $res->{rootfs} = {
            total => $dinfo->{blocks},
            avail => $dinfo->{bavail},
            used => $dinfo->{used},
            free => $dinfo->{blocks} - $dinfo->{used},
        };
...
  1. 编辑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语法修改,有不懂的可以问GPT(或问心一言等)。

...
        {
            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/>');
            }
        },
        // ======== 添加的内容到这里结束 ========
    ],
...
  1. 重启pveproxy服务
    执行systemctl restart pveproxy,浏览器刷新如果不生效,记得清空缓存再刷新。
  2. 效果


    pve manager

参考资料

  1. https://post.smzdm.com/p/a0q5v720/
  2. https://blog.csdn.net/u013693304/article/details/120975823

相关文章

网友评论

      本文标题:PVE 7.3 网页上显示CPU和硬盘温度(以及硬盘温度不显示的

      本文链接:https://www.haomeiwen.com/subject/tagcbdtx.html