sensors を使用して CPU の温度だけを
取り出すシェルスクリプト

---------------------------------------------------------------------------------

ただし、私のサーバ機でのデータ(下記の表示)から、温度だけを取り出すプログラムの
        例です。

    coretemp-isa-0000
    Adapter: ISA adapter
    Core 0:      +33.0°C  (high = +80.0°C, crit = +100.0°C)

cpu_temp.sh の名前で作成しています。

※ sensors コマンドの出力結果は、手入力とシェルスクリプトからでは、違いがある
   ので、echo コマンドを入れて確認してください。

#!/bin/bash
#=========================================================================
#	lm_sensorsを使用して CPU の温度を抽出する。
#       H25.03.28 CentOS 6.X用 
#       直接起動した時とHTMLからした時、結果が違うので修正
# 
sensors > DATA01.txt
#echo $SEARCH_DATA01   <----- 確認用
#
HDD_ondo1=$(grep -n "Core 0:" DATA01.txt)
HDD_ondo1=$(echo $HDD_ondo1 | sed -e "s/ //g")                   # 半角スペース削除
#HDD_ondo2=$(echo $HDD_ondo1 | sed -e "s/(high=+80.0°C,//g")    # 文字列削除
#HDD_ondo2=$(echo $HDD_ondo2 | sed -e "s/crit=+100.0°C)//g")    # 文字列削除
HDD_ondo3=$(echo $HDD_ondo1 | sed -e "s/3:Core0://g")            # 文字列削除
HDD_ondo4=$(echo $HDD_ondo3 | sed -e "s/C//g")                   # 文字列削除
HDD_ondo5=$(echo $HDD_ondo4 | sed -e "s/(high=+80.0,crit=+100.0)//g")   # 文字列削除
#echo "$HDD_ondo3"
echo "$HDD_ondo5"
#
# 	これをしないと、DATA01.txtのファイルが沢山作られます。
rm DATA01.txt
#

ホームヘージ上に SSI を使用して表示させる perl のプログラム例です。

#!/usr/bin/perl
#------------------------------------------------------------------------
#	cpu_temp.sh で 
#	sensorsを使用して CPU の温度を抽出する。
#------------------------------------------------------------------------
#
$time_data = `/var/www/html/www.smiyasaka.com/cpu_temp.sh`;
#
print "<!-- cpu_temp_get.pl start -->\n";
print "<b>CPU 温度</b>   </font><font color=\"red\"><b>$time_data</b></font>";
print "<font color=\"blue\"><b>°C</b></font>\n";
print "<!-- cpu_temp_get.pl end -->\n";
exit(0);
#

*************************************************************************
                     ※  参考プログラム 1  ※
*************************************************************************

ここからは、perl だけで作ったプログラムで、出力結果は、上記と同じです。

#!/usr/bin/perl
#----------------------------------------------------
# lm_sensorsを使用して CPU の温度を抽出する。
# 直接起動した時とHTMLからした時、結果が違うので修正
#----------------------------------------------------
use strict;
#----------------------------------------------------
# ドメインで dig コマンドを実行し、パイプで
# 結果を get_data に格納する
#
open( get_data, "sensors |");
#
while(<get_data>) {
#      # 改行コードを削除
    chomp;
# スペースで分割して配列に代入
    my @Data = split(" ", $_ );
#           print $Data[0],"=","\n";
# 先頭がドメインの行を抽出
   if ( $Data[0] eq 'Core' ){
# Core0 の CPU 温度を抽出 +○○
     my $temp = substr( $Data[2], 0,3 );
#
print "<!-- cpu_temp_get.pl start -->\n";
print "<b>CPU 温度</b>   </font><font color=\"red\"><b>$temp</b></font>";
print "<font color=\"blue\"><b>°C</b></font>\n";
print "<!-- cpu_temp_get.pl end -->\n";
   }
}
close(get_data);
exit(0);

*************************************************************************
                     ※  参考プログラム 2  ※
*************************************************************************

出力結果は、上記と同じでが、open 関数を使わないで作成してみました。

#!/usr/bin/perl
#----------------------------------------------------
#  lm_sensorsを使用して CPU の温度を抽出する。
#----------------------------------------------------
# 先頭に Core の文字列がある行のみ抽出する

    $Data1 = `/usr/bin/sensors | grep Core`;

# 複数 CPU の時には、一行毎分割する
    @Data2 = split("\n",$Data1);
# 文字列を スペースで分割する
    @Data = split(" ",$Data2[0]);
# 3番目の配列に温度データがある
    $temp = substr( $Data[2], 0,3 );
# 温度データを HTML へ出力する
    print "CPU 温度 $temp 度\n";