www.smiyasaka.com は、 2019 年2月から SSL 化し 通信を暗号化した方式で発信をしています。

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";