センサー出力をパーソナライズしてファイルに保存

センサー出力をパーソナライズしてファイルに保存

端末出力をログ情報に再フォーマットする方法を知りたいです。具体的には、パッケージ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。これで、文字列は3つの部分に分けられます。コロンとスペースで始まるセンサー名^[a-zA-Z0-9 ]*:\s*、記号、数字、点で構成される温度、\([0-9.+-]*\)文字列の終わりまでの残りの部分.*$。 2番目の部分は括弧を使用して参照として表示されます。
  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

関連情報