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

背景

最近把机器放进柜子,需要关注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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容