このスクリプトでは、MRTGを使用して、ubuntuサーバー12.04のセンサーからデータを取得しています。
#!/bin/bash
SENSORS=/usr/bin/sensors
UPTIME=$(uptime | awk -F, '{print $3}' )
TEXT="Graphic Card Temperature"
GPCTEMP1=$( ${SENSORS} | grep "temp1" | awk '{print int($3)}' )
# http://people.ee.ethz.ch/~oetiker/webtools/mrtg/reference.html
# "The external command must return 4 lines of output:
# Line 1
# current state of the first variable, normally 'incoming bytes count'
# Line 2
# current state of the second variable, normally 'outgoing bytes count'
# Line 3
# string (in any human readable format), telling the uptime of the target.
# Line 4
# string, telling the name of the target. "
echo ${GPCTEMP1}
echo ${GPCTEMP1}
echo ${UPTIME}
echo ${TEXT}
残念ながら、センサーを実行すると「temp1」という名前のセンサーが2つあります。
/etc/mrtg/cfg/mrtg-scripts$ sensors
adt7490-i2c-0-2e
Adapter: SMBus I801 adapter at f000
in0: +1.12 V (min = +0.00 V, max = +3.31 V)
Vcore: +1.09 V (min = +0.00 V, max = +2.99 V)
+3.3V: +3.25 V (min = +2.96 V, max = +3.61 V)
+5V: +5.03 V (min = +4.48 V, max = +5.50 V)
+12V: +11.90 V (min = +0.00 V, max = +15.69 V)
in5: +2.10 V (min = +0.00 V, max = +4.48 V)
fan1: 1312 RPM (min = 0 RPM)
fan2: 0 RPM (min = 0 RPM)
fan3: 0 RPM (min = 0 RPM)
fan4: 0 RPM (min = 0 RPM)
temp1: +38.5°C (low = +5.0°C, high = +65.0°C)
(crit = +70.0°C, hyst = +66.0°C)
M/B Temp: +39.8°C (low = +5.0°C, high = +65.0°C)
(crit = +70.0°C, hyst = +66.0°C)
temp3: +42.2°C (low = +5.0°C, high = +65.0°C)
(crit = +70.0°C, hyst = +66.0°C)
coretemp-isa-0000
Adapter: ISA adapter
Core 0: +59.0°C (high = +74.0°C, crit = +100.0°C)
Core 1: +55.0°C (high = +74.0°C, crit = +100.0°C)
Core 2: +55.0°C (high = +74.0°C, crit = +100.0°C)
Core 3: +57.0°C (high = +74.0°C, crit = +100.0°C)
radeon-pci-0100
Adapter: PCI adapter
temp1: +60.5°C
Radeon-pci-0100の情報を取得したいのですが、どうすればよいですか?
これは、grepでsensors
を使用した場合の結果です
/etc/mrtg/cfg/mrtg-scripts$ sensors | grep "temp1"
temp1: +38.8°C (low = +5.0°C, high = +65.0°C)
temp1: +60.5°C
さて、最も簡単なアプローチは、最後の行を取得することです。
sensors | grep temp1 | tail -n 1 | awk '{print int($3)}'
tail -n 1
は、ファイルの最終行を印刷します。
または
sensors | tac | grep -m 1 temp1 | awk '{print int($3)}'
tac
は入力を逆にし、1行目が最後になります。つまり、temp1
の最初の一致が重要であり、grep -m 1
は最初の一致のみを出力するため、これが得られます。
個人的には、既にawk
を使用しているため、awk
ですべてを実行します。
sensors | awk '/temp1/{k=int($2)}END{print k}
ここでの考え方は、行がtemp1
に一致するたびに、k
がint($2)
に設定されるということです。ただし、k
は、残りのファイルが処理された後に実行されるEND{}
ブロックでのみ出力されるため、最後に見つかった値のみが出力されます。
最も簡単な答えは、mrtgutils-sensors
をインストールすることです。これには、センサーの出力を自動的に解析するmrtg-sensors
パッケージが含まれます。
mrtg-sensors radeon-pci-0100 temp1
正しい答えが得られます。