Sensors

個性化感測器的輸出並將其保存到文件

  • March 1, 2021

我想知道如何重新格式化終端輸出以記錄資訊。更具體地說,我想重新格式化包中 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生成圖表的包功能。但我想實現一個自製解決方案,並使問題更籠統。

我遇到了同樣的問題並實施了解決方案:

sed用於解析帶有正則表達式的管道輸出,結果將sensors附加到日誌文件中。

  1. 日期作為 UNIX 時間戳寫入文件並格式化為標準輸出。為了抑制換行,echo -n "$(date +"%H:%M:%S")使用命令。
  2. 接下來, 的輸出sensors被輸入sed以解析每一行以通過搜尋找到溫度°C
  3. 結果是通過管道傳輸到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

引用自:https://unix.stackexchange.com/questions/79060