Sensors
個性化感測器的輸出並將其保存到文件
我想知道如何重新格式化終端輸出以記錄資訊。更具體地說,我想重新格式化包中
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
附加到日誌文件中。
- 日期作為 UNIX 時間戳寫入文件並格式化為標準輸出。為了抑制換行,
echo -n "$(date +"%H:%M:%S")
使用命令。- 接下來, 的輸出
sensors
被輸入sed
以解析每一行以通過搜尋找到溫度°C
。- 結果是通過管道傳輸到
sed
. 現在字元串分為三部分:以冒號和空格開頭的感測器名稱,^[a-zA-Z0-9 ]*:\s*
由符號、數字和點組成的溫度,\([0-9.+-]*\)
其餘部分到字元串的末尾.*$
。第二部分通過使用括號標記為參考。- 結果再次通過管道傳輸
sed
以刪除換行符。點擊查看更多細節- 腳本休眠 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