Perl でハードディスクの温度を定期的に Twitter にポストする
ちょっと Twitter での aoshiman さんの発言 が気になったので、Blog を見てみることに。
自宅サーバは極端に熱のこもる場所に設置してあるわけではないので、廃熱に関してはそこそこ大丈夫だと思っているのだけど、それでもハードディスクとかの温度は心配。
http://aoshiman.net/weblog/2009/09/04/python_hdtemp/
あるある。
というわけで、実行してみよぅ。
% python hdd_info.py zsh: command not found: python
あるある。
さ、Perl で書こう。
の前に、まさかとは思うけれど、とりあえず CPAN で調べてみよう。
またまた。ご冗談を。
- local::lib をつかってインストールするよ
$ mkdir -p hddtemp/lib # <-- local::lib 用のディレクトリ $ cd hddtemp $ perl -Mlocal::lib=lib -MCPAN -e shell cpan[1]> install Linux::hddtemp
ためしてみよう。
$ perl -Mlocal::lib=lib -MData::Dumper -MLinux::hddtemp -e 'print Dumper(Linux::hddtemp->new->get)' $VAR1 = { '/dev/sdd' => { 'unit' => 'C', 'temp' => '34', 'name' => 'Hitachi HTS543216L9A300' }, ... ずらずらと
えっ。なにこれこわい。
ちなみに、Linux::hddtemp は IO::Socket からデータを取得しているみたい。
つまり hddtemp をデーモンモードで起動している必要があるみたいです。
debian では以下のコマンドを実行すると、デーモンモードで起動するかどうかを選択する画面が出るので、YES を選ぶことでデーモンモードで起動します。
% dpkg-reconfigure hddtemp
あとは、Twitter への POST は Net::Twitter を使えば OK なので。。。
#!/usr/bin/env perl use warnings; use strict; use utf8; use FindBin; use local::lib "$FindBin::Bin/lib"; use Linux::hddtemp; use Net::Twitter; use DateTimeX::Lite qw/ Strftime /; our $USER = 'botname'; our $PASS = 'botpass'; my @status; my $now = DateTimeX::Lite->now( time_zone => 'local' )->strftime("%H:%M %p"); my $temp = Linux::hddtemp->new->get; foreach my $dev ( sort keys %{$temp} ) { push @status, sprintf("[%s] => %s℃", $dev, $temp->{$dev}{temp}); } my $twitter = Net::Twitter->new( username => $USER, password => $PASS ); $twitter->update( sprintf("%s at %s", join(' : ', @status), $now) );
あれ、なんだかあっさり?
これで、こんな内容で POST してくれるようになりました。
[/dev/sda] => 34℃ : [/dev/sdb] => 33℃ : [/dev/sdc] => 33℃ : [/dev/sdd] => 33℃ at 20:30 PM
とりあえず、わーい。
でも、なんとなくちょっと拡張してみたい気がするよね。。。?
なんか、温度の情報が1つの RSS Feed だと考えると Plagger を使って Twitter にPOST するとか、GMail に送信するとか。。。
SQLite に保存してグラフにしてみるとか。。。