サーバーXS36V4のCPU温度を測る
30分毎の記録とリアルタイムでウェブ表示
0.CPU温度を取り出すには?
CPU温度を計測するには、ソフトの「sensors」を使うUSER@ubuntu-server:~/sensors$ sensors acpitz-virtual-0 Adapter: Virtual device temp1: +26.8°C (crit = +90.0°C) coretemp-isa-0000 Adapter: ISA adapter Core 0: +40.0°C (high = +105.0°C, crit = +105.0°C) <==ここ Core 1: +40.0°C (high = +105.0°C, crit = +105.0°C) <==ここ Core 2: +42.0°C (high = +105.0°C, crit = +105.0°C) <==ここ Core 3: +42.0°C (high = +105.0°C, crit = +105.0°C) <==ここ it8728-isa-0a40 Adapter: ISA adapter in0: +0.71 V (min = +2.48 V, max = +0.89 V) ALARM in1: +1.38 V (min = +2.05 V, max = +1.66 V) ALARM in2: +0.86 V (min = +1.07 V, max = +2.58 V) ALARM in3: +1.03 V (min = +1.36 V, max = +2.69 V) ALARM in4: +2.22 V (min = +2.28 V, max = +2.98 V) ALARM in5: +2.22 V (min = +2.72 V, max = +2.82 V) ALARM in6: +2.22 V (min = +1.72 V, max = +1.36 V) ALARM 3VSB: +3.31 V (min = +5.09 V, max = +3.38 V) ALARM Vbat: +3.24 V fan1: 0 RPM (min = 42 RPM) ALARM fan2: 0 RPM (min = 11 RPM) ALARM fan3: 0 RPM (min = 22 RPM) ALARM temp1: +41.0°C (low = -116.0°C, high = -65.0°C) ALARM sensor = thermistor temp2: +45.0°C (low = +71.0°C, high = +89.0°C) sensor = thermistor temp3: -8.0°C (low = -43.0°C, high = -19.0°C) ALARM sensor = thermistor intrusion0: ALARMとなります。
1.30分毎にファイルにCPU温度を記録する
ファイルに出力するperlスクリプトはこちら#!/usr/bin/perl -w # -w ワーニングを出す # ~nic/sensors/sensors.pl # cron で定時で取り込む # CPUの温度を出力する # 2018/04/04(水) # use strict; # 宣言した変数以外を使えなくする my @core_ondo; my $temp_ondo; my $out_file="/home/USER/sensors/cpu_ondo.txt" ; # 出力ファイル名 my $sens_kari="/home/USER/sensors/kari.txt"; # sensorsの結果を出力する仮ファイル my $ii=-1 ; my $line ; # 時刻出力用 my $sec; my $min; my $hour; my $mday; my $mon; my $year; my $wday; my $yday; my $isdst; my $tt; my $null=""; # 読み込み書き込みファイルオープン # 読み取り 書き込み 追加 新規作成 上書き # < filename ○ × × × × # > filename × ○ × ○ ○ # >> filename × ○ ○ ○ × # +< filename ○ ○ × × × # +> filename ○ ○ × ○ ○ # +>> filename ○ ○ ○ ○ × system( `sensors | grep Core >$sens_kari` ) ; # sensorsの結果を仮ファイルに出力 open IN,"<",$sens_kari; # sensors が出力した結果を読み込むため仮ファイルを開く LABEL3: while ($line = <IN>) { ; # 1行ずつ読み込み if ( $line =~/\d+\.\d+/ ) { ; # Coreの温度を パターンマッチ ex 38.6 $ii=$ii+1 ; $core_ondo[$ii]=$& ; } } close IN ; # ########################### 時刻とデータの印字(ファイルへの出力) $tt=time(); ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($tt); $year=$year+1900; $mon=$mon+1; # ファイルへの出力 open (LOGFILE,">>$out_file") or die "ERROR output file not open$!\n" ; # 出力ファイルをオープン print LOGFILE $year,"/",$mon,"/",$mday," ",$hour,":",$min,":",$sec," ",$core_ondo[0]," ",$core_ondo[1]," ",$core_ondo[2]," ",$core_ondo[3],"\n" ; close LOGFILE ;
2.リアルタイムでウェブからCPU温度をみる
リアルタイムでウェブから見られるようにしようとしたが、エラーがでる。#!/usr/bin/perl -w # -w ワーニングを出す # ~nic/sensors/sensors-realtime.pl # cron で定時で取り込む # CPUの温度をHPへ出力する # 2018/04/05(水) # use strict; # 宣言した変数以外を使えなくする my @core_ondo; my $temp_ondo; my $out_file="/home/USER/sensors/cpu_ondo.txt" ; # 出力ファイル名 my $sens_kari="/tmp/kari_realtime.txt"; # sensorsの結果を出力する仮ファイル cgiでは # ownerが「www-data」でパーミッションエラー # /tmp に変更することで書き込み可能となった。 my $ii=-1 ; my $line ; # 時刻出力用 my $sec; my $min; my $hour; my $mday; my $mon; my $year; my $wday; my $yday; my $isdst; my $tt; my $null=""; # 読み込み書き込みファイルオープン # 読み取り 書き込み 追加 新規作成 上書き # < filename ○ × × × × # > filename × ○ × ○ ○ # >> filename × ○ ○ ○ × # +< filename ○ ○ × × × # +> filename ○ ○ × ○ ○ # +>> filename ○ ○ ○ ○ × system( `sensors | grep Core >$sens_kari` ) ; # sensorsの結果を仮ファイルに出力 open IN,"<",$sens_kari; # sensors が出力した結果を読み込むため仮ファイルを開く LABEL3: while ($line = <IN>) { ; # 1行ずつ読み込み if ( $line =~/\d+\.\d+/ ) { ; # Coreの温度を パターンマッチ ex 38.6 $ii=$ii+1 ; $core_ondo[$ii]=$& ; } } close IN ; # ########################### 時刻とデータの印字(ファイルへの出力) $tt=time(); ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($tt); $year=$year+1900; $mon=$mon+1; # ファイルへの出力はしない −−> HPへ出力 #open (LOGFILE,">>$out_file") or die "ERROR output file not open$!\n" ; # 出力ファイルをオープン #print LOGFILE $year,"/",$mon,"/",$mday," ",$hour,":",$min,":",$sec," ",$core_ondo[0]," ",$core_ondo[1]," ",$core_ondo[2]," ",$core_ondo[3],"\n" ; #close LOGFILE ; # ########################### ここからHTML出力へ print "Content-type: text/html\n\n"; print <<EOM; <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>CPUの温度を表示</title> </head> <body> サーバーXS36V4のCPU温度の状況(°C)<br><br> <table align="left"> <tr><td>年月日</td><td>時刻</td><td> CPU0 </td><td> CPU1 </td><td> CPU2 </td><td> CPU3 </td></tr> <tr><td>$year/$mon/$mday</td><td>$hour:$min:$sec</td><td> $core_ondo[0]</td><td>$core_ondo[1]</td><td>$core_ondo[2]</td><td>$core_ondo[3]</td></tr> </table> <br> </body> </html> EOM # ################### HTML 出力 ここまで