温度显示:
首先我们要先安装温度检测工具
apt-get install lm-sensors
lm_sensors可以用来监控CPU和主板温度以及风扇速度
在shell中输入命令sensors,就能显示信息
root@pve:~# sensors
coretemp-isa-0000
Adapter: ISA adapter
Package id 0: +48.0°C (high = +105.0°C, crit = +105.0°C)//cpu温度
Core 0: +48.0°C (high = +105.0°C, crit = +105.0°C)
Core 1: +49.0°C (high = +105.0°C, crit = +105.0°C)
Core 2: +49.0°C (high = +105.0°C, crit = +105.0°C)
Core 3: +49.0°C (high = +105.0°C, crit = +105.0°C)
acpitz-acpi-0
Adapter: ACPI interface
temp1: +46.0°C (crit = +95.0°C)
nvme-pci-0100
Adapter: PCI adapter
Composite: +62.9°C (low = -273.1°C, high = +89.8°C)//nvme硬盘温度
(crit = +89.8°C)
ERROR: Can't get value of subfeature temp2_min: I/O error //这两个是读不出来
ERROR: Can't get value of subfeature temp2_max: I/O error
Sensor 1: +62.9°C (low = +0.0°C, high = +0.0°C)
需要修改的文件
/usr/share/perl5/PVE/API2/Nodes.pm //数据来源
/usr/share/pve-manager/js/pvemanagerlib.js //桌面版的js
/usr/share/pve-manager/touch/pvemanager-mobile.js //手机版的js
在Nodes.pm中搜索pveversion,在这段代码下面加入
$res->{thermalstate} = `sensors`;
pc端浏览器界面增加温度显示
在pvemanagerlib.js文件中也是搜索pveversion,在它这段代码下面加入
{
itemId: 'thermal',
colspan: 2,
printBar: false,
title: gettext('Temperature'),
textField: 'thermalstate',
renderer:function(value){
const c0 = value.match(/Package id 0.*?\+([\d\.]+)?/)[1];
const c1 = value.match(/Composite.*?\+([\d\.]+)?/)[1];
return `CPU: ${c0} | NVME: ${c1} `
}
},
要注意的事情是cpu和nvme的温度是根据正则表达式从数据字符串里取的,需要根据sensors中输出的信息做相应修改,注意红色字体部分可以。
pve7.0 pveversion代码下面还有一段输出订阅状态的代码,看需求可以删除掉。
手机端增加温度显示
在pvemanager-mobile.js文件中搜索PVE.NodeInfo,具体代码显示如下
Ext.define('PVE.NodeInfo', {
extend: 'Ext.Component',
alias: 'widget.pveNodeInfo',
config: {
style: 'background-color: white;',
styleHtmlContent: true,
data: [],
tpl: [
'<table style="margin-bottom:0px;">',
'<tr><td>Version:</td><td>{pveversion}</td></tr>',
'<tr><td>Memory:</td><td>{[this.meminfo(values)]}</td></tr>',
'<tr><td>CPU:</td><td>{[this.cpuinfo(values)]}</td></tr>',
'<tr><td>Uptime:</td><td>{[Proxmox.Utils.format_duration_long(values.uptime)]}</td></tr>',
'<tr><td>Temp:</td><td>{[this.tempinfo(values)]}</td></tr>',//增加页面显示温度是位置
'</table>',
{
meminfo: function(values) {
var d = values.memory;
if (!d) {
return '-';
}
return Proxmox.Utils.format_size(d.used || 0) + " of " + Proxmox.Utils.format_size(d.total);
},
//增加获取温度的方法
tempinfo: function(values) {
var d = values.thermalstate;
if (!d) {
return '-';
}
var c0 = d.match(/Package id 0.*?\+([\d\.]+)?/)[1];
var c1 = d.match(/Composite.*?\+([\d\.]+)?/)[1];
return 'CPU:'+c0+' | NVME:'+c1;
},
cpuinfo: function(values) {
if (!values.cpuinfo) {
return '-';
}
var per = values.cpu * 100;
return per.toFixed(2) + "% (" + values.cpuinfo.cpus + " CPUs)";
}
}
]
},
});
修改完成后在shell中重启pve的web管理器:
systemctl restart pveproxy
完成温度显示操作。
关闭ksm 内核共享内存
进程有一个ksm的进程会占用一部分cpu,会一直检测虚拟机的空闲内存,可以空出来给其他虚机用,用不到可以关闭
systemctl disable ksmtuned
systemctl stop ksmtuned
去登陆后的订阅弹窗
需要修改文件/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
搜索关键字 checked_command 定位,if判断改成false即可,然后重启pve的web管理器
checked_command: function(orig_cmd) {
Proxmox.Utils.API2Request(
{
url: '/nodes/localhost/subscription',
method: 'GET',
failure: function(response, opts) {
Ext.Msg.alert(gettext('Error'), response.htmlStatus);
},
success: function(response, opts) {
let res = response.result;
if (false) { //这里改成false
Ext.Msg.show({
title: gettext('No valid subscription'),
icon: Ext.Msg.WARNING,
message: Proxmox.Utils.getNoSubKeyHtml(res.data.url),
buttons: Ext.Msg.OK,
callback: function(btn) {
if (btn !== 'ok') {
return;
}
orig_cmd();
},
});
} else {
orig_cmd();
}
},
},
);
},