仕組みはPerlでsensorsコマンドを実行し、得られた結果をテキストに保存するだけの簡単な処理です。
lm_sensorsのインストールは前回の記事を参考にしてください。
centos7で温度取得
1.動作テスト
次のPerlコードを実行してsensorsコマンドの結果を取得できるか確認する。#!usr/bin/perl
$ret = `sensors`;
print $ret;
実行結果
acpitz-virtual-0
Adapter: Virtual device
temp1: +40.0ーC (crit = +60.0ーC)
k10temp-pci-00c3
Adapter: PCI adapter
temp1: +43.5ーC (high = +70.0ーC)
it8716-isa-0e80
Adapter: ISA adapter
in0: +1.87 V (min = +0.00 V, max = +4.08 V)
in1: +1.18 V (min = +0.00 V, max = +3.06 V)
in2: +3.38 V (min = +0.00 V, max = +4.08 V)
+5V: +2.98 V (min = +0.00 V, max = +4.08 V)
in4: +2.99 V (min = +0.00 V, max = +4.08 V)
in5: +1.07 V (min = +0.00 V, max = +4.08 V)
in6: +1.09 V (min = +0.00 V, max = +4.08 V)
in7: +4.08 V (min = +0.00 V, max = +4.08 V) ALARM
Vbat: +3.42 V
fan1: 1527 RPM (min = 0 RPM)
fan2: 0 RPM (min = 10 RPM) ALARM
fan3: 0 RPM (min = 10 RPM) ALARM
temp1: +47.0ーC (low = +127.0ーC, high = +112.0ーC) sensor = thermal diode
temp2: +42.0ーC (low = +127.0ーC, high = +112.0ーC) sensor = thermistor
temp3: +74.0ーC (low = +127.0ーC, high = +112.0ーC) sensor = thermal diode
cpu0_vid: +0.375 V
intrusion0: ALARM
2.センサ名と温度を取得
sensorsコマンドの結果からセンサ名(acpitz-virtual-0やk10temp-pci-00c3など)と温度の値を取得。#!usr/bin/perl
$ret = `sensors`;
while($ret =~ m/(.*?)\n\n/gs){
$block = $1;
if($block =~ /(^.*)\n/){
$sensorName = $1;
print $sensorName,"\n";
%temp;
while($block =~ m/(temp\d): *+(.*?)ーC/g){
$temp{$1} = $2;
}
print %temp,"\n";
}
}
実行結果
$ perl Temperature.pl
acpitz-virtual-0
temp1+40.0
k10temp-pci-00c3
temp1+42.9
it8716-isa-0e80
temp1+45.0temp3+73.0temp2+42.0
3.ファイルに保存
CSV形式でファイルに保存#!usr/bin/perl
use Time::Piece;
$ENV{'TZ'} = "JST-9";
$t=localtime;
$tStr = $t->strftime('%F %T');
$ret = `sensors`;
while($ret =~ m/(.*?)\n\n/gs){
$block = $1;
if($block =~ /(^.*)\n/){
$sensorName = $1;
print $sensorName,"\n";
%temp;
while($block =~ m/(temp\d): *+(.*?)ーC/g){
$temp{$1} = $2;
}
print %temp,"\n";
open(DATA,'>>',$sensorName.'.csv');
print DATA $tStr;
foreach (sort(keys(%temp))){
print DATA ',',($temp{$_}+0.0);
}
print DATA "\n";
close(DATA);
}
}
4.プログラムを一定間隔で実行させる
systemdのtimerを使用してプログラムを5分間隔で実行させる。4.1 serviceファイルを作成する。
/etc/systemd/system/にserviceファイルtempe-monitor.serviceを作成する。$ sudo vi /etc/systemd/system/tempe-monitor.servicetempe-monitor.serviceの内容
[Unit]
Description=Temperature Monitoring service
[Service]
Type=simple
ExecStart=/usr/bin/perl /home/User/monitoringScripts/Temperature.pl
User=User
WorkingDirectory=/home/User/monitoringScripts/
[Install]
WantedBy=multi-user.target
サービスを実行してファイルに温度が書き込まれるか確認する。
$ sudo systemctl daemon-reload $ sudo systemctl start tempe-monitor.service
4.2 timerファイルを作成する
/etc/systemd/system/にtimerファイルtempe-monitor.timerを作成する。$ sudo vi /etc/systemd/system/tempe-monitor.timertempe-monitor.timerの内容
[Unit]
Description=Temperature 5min monitoring
[Timer]
OnBootSec=5min
OnUnitActiveSec=5min
[Install]
WantedBy=timers.target
タイマーを実行してファイルに温度が5分間隔で書き込まれるか確認する。
$ sudo systemctl daemon-reload $ sudo systemctl start tempe-monitor.timer動作することを確認したら、PC起動時に自動的にタイマーが実行するように設定する。
$ sudo systemctl enable tempe-monitor.timer以上。
0 件のコメント:
コメントを投稿