个性化传感器的输出并将其保存到文件

个性化传感器的输出并将其保存到文件

我想知道如何重新格式化终端输出以记录信息。更具体地说,我想重新格式化 包sensors中命令的输出lm-sensors并将其写入文件。输出看起来像这样:

acpitz-virtual-0
Adapter: Virtual device
temp1:        +61.0°C  (crit = +99.0°C)
temp2:        +29.8°C  (crit = +99.0°C)

coretemp-isa-0000
Adapter: ISA adapter
Physical id 0:  +63.0°C  (high = +86.0°C, crit = +100.0°C)
Core 0:         +62.0°C  (high = +86.0°C, crit = +100.0°C)
Core 1:         +59.0°C  (high = +86.0°C, crit = +100.0°C)
Core 2:         +63.0°C  (high = +86.0°C, crit = +100.0°C)
Core 3:         +61.0°C  (high = +86.0°C, crit = +100.0°C)

radeon-pci-0100
Adapter: PCI adapter
temp1:        +61.5°C

我重新格式化的目的是为了以后使用 gnuplot (实时绘图)数据。所以结果应该类似于:

# Timestamp [hh:mm:ss]    temp1 [°C]       temp2 [°C]     ... 
13:45:52                  65.0             29.0            .
13:45:53                  66.0             28.0            .
13:45:54                  64.0             27.0            .
13:45:55                  55.0             26.0            .
...                       ...              ...             .

我想在具有不同数量传感器的多台计算机上使用它,这需要某种循环。但是从哪里到哪里会有一个循环以及如何消除冗余线路(例如 acpitz-virtual-0、适配器:虚拟设备,...)。我也知道lm-sensors生成图表的包功能。但我想实现一个自制解决方案,并使问题更加笼统。

答案1

我遇到了同样的问题并实施了解决方案:

使用正则表达式sed解析管道输出,sensors结果将附加到日志文件中。

  1. 日期作为 UNIX 时间戳写入文件并格式化为标准输出。要抑制换行符,echo -n "$(date +"%H:%M:%S")请使用该命令。
  2. 接下来,将 的输出sensors通过管道传输sed到解析每一行,以通过搜索 来查找温度°C
  3. 结果通过管道传送到 agine sed。现在字符串被分为三个部分:传感器的名称以冒号和空格开头^[a-zA-Z0-9 ]*:\s*,温度由符号、数字和点组成,\([0-9.+-]*\)其余到字符串的末尾.*$。第二部分通过使用括号标记为参考。
  4. 结果再次通过管道传送以sed删除换行符。点击查看更多细节
  5. 脚本休眠 X 秒。 (在我的例子中是 5 秒。)

生成的批处理脚本:

# Printing the names of the columns as first row in file
echo "Time;     temp1;  temp2;  Physical id 0;  Core 0; Core 1; Core 2; Core 3; SIO Temp;       temp3" > Temperatures.log
while true
do
    # Printing the time and all temperatures to stdout
    echo -n "$(date +"%H:%M:%S"): "
    sensors | sed -n "/°C/p" | sed "s/^[a-zA-Z0-9 ]*:\s*\([0-9.+-]*\).*$/\1/" | sed ':a;N;$!ba;s/\n/;\t/g'

    # Logging time as UNIX time and temperatures to file
    echo -n "$(date +"%s");     " >> Temperatures.log
    sensors | sed -n "/°C/p" | sed "s/^[a-zA-Z0-9 ]*:\s*\([0-9.+-]*\).*$/\1/" | sed ':a;N;$!ba;s/\n/;\t/g' >> Temperatures.log

    # Sleeping for X seconds
    sleep 5
done

相关内容