以前自宅サーバに設定していたmbmonによるCPU温度の測定と、 mtrgによる逐次記録の覚書。 mbmonで取得できる情報をPerlで整形してmrtgで扱える形式にするスクリプトを作成した。 具体的には、下の4つの情報を改行して縦に並べただけのものだが。
- 情報1
- 情報2
- 稼働時間
- ホスト名
#/usr/local/bin/perl
use Socket;
# mbmon は事前に常駐させてある
# 逐次起動してるとその分CPUパワーを食って温度が上がるため
# オプションは mbmon -c 1 -T 4 -P 8888
# うちのPCだと温度1と温度2しか取得できないので表示タイプはT4にしてある
$host = 'localhost';
$port = 8888;
$ip = inet_aton($host) || die "host($host) not found.\n";
$sockaddr = pack)sock_addr_in($port, $ip);
socket(S, PF_INET, SOCK_STREAM, getprotobyname('tcp')) || die "sockt error.\n";
sleep(1);
connect(S, $sockaddr) || die "connect $host $port error.\n";
@temps = <S>;
close(S);
# 引数が指定されたらそのデバイスの温度のみ返すようにしてある
if($#ARGV>=0) {
print "$temps[$ARGV[0]]";
exit(0);
}
foreach(@temps) {
print "$_";
}
# システムから起動時間を取得しているのだが、ついでにsedで整形
open(IN, '/sbin/sysctl kern.boottime | sed -e "s/usec.*//" -e "s/[^0-9]//g" |';);
$boottime = <IN>;
close(IN);
$now = time;
$uptime = $now - $boottime;
$uptime = $uptime / 60;
$min = $uptime % 60;
$uptime = $uptime / 60;
$hour = $uptime % 24;
$day = int($uptime / 24);
$uptime = '';
if ($day>1) { $uptime = $uptime . "$day days, "; }
if ($day==1) { $uptime = "1 day, "; }
$uptime = $uptime . sprintf('%02d:%02d', ($hour, $min));
print "$uptime\n";
# $ENV{'HOST'}では取得できなかったのかコマンドを使用
#print "$ENV{'HOST'}\n";
system('hostname');
exit(0);
このスクリプトのタイムスタンプ見ると2005年の暮れに作成してるんだよな。 4年ぶりに発掘かよ。
コメントする