选择皮肤
jiang
2023-10-10 18:37:38
jiang\n楼主
先进入pve的shell,安装 lm-sensors
apt update
apt install lm-sensors
安装完成后,可以运行命令“sensors-detect”来探测哪些传感器可用并加载相关的内核模块。
执行命令“sensors”即可显示出系统运行的温度状态,下面是 J1900 的显示结果示例(Core 0和Core 1和Core 2和Core 3表示有四个CPU核心):
root@J1900:~# sensors
soc_dts0-virtual-0
Adapter: Virtual device  #适配器:虚拟设备
temp1:        +66.0°C  

BAT1-acpi-0
Adapter: ACPI interface #适配器:ACPI 接口
in0:          +8.14 V  #电池电压
curr1:        +0.85 A  #电流?

soc_dts1-virtual-0
Adapter: Virtual device #适配器:虚拟设备
temp1:        +67.0°C  

coretemp-isa-0000
Adapter: ISA adapter #适配器:ISA 适配器
Core 0:       +66.0°C  (high = +105.0°C, crit = +105.0°C) #核心 0
Core 1:       +66.0°C  (high = +105.0°C, crit = +105.0°C) #核心 1
Core 2:       +71.0°C  (high = +105.0°C, crit = +105.0°C) #核心 2
Core 3:       +71.0°C  (high = +105.0°C, crit = +105.0°C) #核心 3

acpitz-acpi-0
Adapter: ACPI interface  #适配器:ACPI 接口
temp1:        +71.0°C  (crit = +90.0°C) 

root@J1900:~# 
jiang
2023-10-11 15:55:15
jiang\n楼主

PVE6.4

先备份之后要修改的两个文件
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/pvemanagerlib.js.bak
修改文件内容 ' vi /usr/share/perl5/PVE/API2/Nodes.pm ' ,添加 ' $res->{thermalstate} = sensors; '(注意,sensors左右两个不是分号,而是在英文状态下字母区上方的数字键区域最左侧按键打出来的反引号)
        };

        $res->{ksm} = {
            shared => $meminfo->{memshared},
        };

        $res->{swap} = {
            free => $meminfo->{swapfree},
            total => $meminfo->{swaptotal},
            used => $meminfo->{swapused},
        };

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

        $res->{thermalstate} = `sensors`;


        my $dinfo = df('/', 1);     # output is bytes

        $res->{rootfs} = {
            total => $dinfo->{blocks},
            avail => $dinfo->{bavail},
之后修改页面布局,增加界面高度让新的CPU内容有地方显示,编辑 ' vi /usr/share/pve-manager/js/pvemanagerlib.js ',修改以下两处地方:
        showLog: function(button, event, rec) {
            var me = this.getView();
            var controller = this;
            var logView = Ext.create('Proxmox.panel.LogView', {
                border: false,
                url: "/api2/extjs/nodes/" + me.nodename + "/replication/" + rec.data.id + "/log",
            });
            var win = Ext.create('Ext.window.Window', {
                items: [logView],
                layout: 'fit',
                width: 800,
                height: 420, 400改420
                modal: true,
                title: gettext("Replication Log"),
            });
            var task = {
                run: function() {
                    logView.requestUpdate();
                },
                interval: 1000,
            };
            Ext.TaskManager.start(task);
第二处修改
        me.callParent();

        Proxmox.Utils.monStoreErrors(me, me.getStore(), true);
        me.reload();
    },
});

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

    height: 320, 300改320
    bodyPadding: '20 15 20 15',

    layout: {
        type: 'table',
        columns: 2,
        tableAttrs: {
            style: {
                width: '100%',
            },
        },
    },
最后增加显示CPU温度的代码
            itemId: 'kversion',
            colspan: 2,
            title: gettext('Kernel Version'),
            printBar: false,
            textField: 'kversion',
            value: '',
        },
        {
            itemId: 'version',
            colspan: 2,
            printBar: false,
            title: gettext('PVE Manager Version'),
            textField: 'pveversion',
            value: '',
        },
        {
                itemId: 'thermal',
                colspan: 2,
                printBar: false,
                title: gettext('CPU温度'),
                textField: 'thermalstate',
                renderer:function(value){
                        const c0 = value.match(/Core 0.*?\+([\d\.]+)?/)[1];
                        const c1 = value.match(/Core 1.*?\+([\d\.]+)?/)[1];
                        const c2 = value.match(/Core 2.*?\+([\d\.]+)?/)[1];
                        const c3 = value.match(/Core 3.*?\+([\d\.]+)?/)[1];
                        return `Core: ${c0} | ${c1} | ${c2} | ${c3}`
                }
        }
    ],

    updateTitle: function() {
        var me = this;
        var uptime = Proxmox.Utils.render_uptime(me.getRecordValue('uptime'));
        me.setTitle(me.pveSelNode.data.node + ' (' + gettext('Uptime') + ': ' + uptime + ')');
    },
        {
                itemId: 'thermal',
                colspan: 2,
                printBar: false,
                title: gettext('CPU温度'),
                textField: 'thermalstate',
                renderer:function(value){
                        const c0 = value.match(/Core 0.*?\+([\d\.]+)?/)[1];
                        const c1 = value.match(/Core 1.*?\+([\d\.]+)?/)[1];
                        const c2 = value.match(/Core 2.*?\+([\d\.]+)?/)[1];
                        const c3 = value.match(/Core 3.*?\+([\d\.]+)?/)[1];
                        return `Core: ${c0} | ${c1} | ${c2} | ${c3}`
                }
        }
修改完成后,重启PVE的Web管理器
systemctl restart pveproxy
之后强制刷新页面即可显示,win下Ctrl + F5 ,Mac下 花键 + shift + R