Menü Schließen

Perl Script zum abfragen der HDD Temperatur mittels SMART

Perl - Camel Logo

System ist Debian Wheezy mit Perl v5.14.2
Ziel ist es die Temperatur von X angegebenen Devices / Festplatten auszuwerten und die Ausgabe so darzustellen, dass sie von Cacti verarbeitet werden kann.
Als Vorbereitung muss smart mittels “# aptitude install smartmontools” installiert werden

Script Get-HDD_Temp.pl

Dies ist ein Perl Script zum Abfragen der Temperatur von X Festplatten mittels SMART. Es ist definitiv noch aus- und umbaufähig, aber das war so in kurzer Zeit realisierbar. Die Verwendung erfolgt auf eigene Gefahr.


#!/usr/bin/perl
# by taste-of-it.de
# erstellt am 16.10.2013
# Version 2.0
# auslesen der smartwerte hdd temp einer oder mehrerer disks
# es wird der smartwert 190 oder 194 und name des device z.b. sda erwartet
# es werden keine fehler abgefangen

# mögliche abfragen - wenn 194 nicht vorhanden dann 190 nehmen
# smartctl 190 Airflow_Temperature_Cel
# smartctl 194 Temperature_Celsius

use strict;
#use warnings;

# kontrolle ob args vorhanden sind
if ( @ARGV < 1) {
print "Bitte den SMART-Wert eingeben und ein Device z.B. 190 sda=/dev/sda.\n";
exit (1);
}else{

my $aSize = @ARGV; # Anzahl der Elemente im Array
my $values;
my $smartname; # Smartname der Abfrage
my $count = 0;

# array der Argumente abfragen
for my $element (@ARGV)
{
# prüfen ob das ARG 0 und somit nicht vorhanden ist
if ($element =~ /^[0]+$/)
{
}else{
# das ARG ist nicht Null und kann somit ausgewertet werden
if ($element =~ /^[0-9]+$/)
{
if ($element == 190)
{
$smartname = 'Airflow_Temperature_Cel';
}elsif ($element == 194)
{
$smartname = 'Temperature_Celsius';
}
}else
{
my $spacer;
# das naechste Element im Array pruefen, wenn 0 dann kein Leerzeichen
if (@ARGV[$count+1] =~ /^[0]+$/){ $spacer = ""; }
else { $spacer = " "; }

# holen der hdd temp aus spalte 10(raw) werte und string bauen -> name:value
$values .= $element.":".int(`smartctl -A /dev/$element | awk -v pattern=$smartname '\$0 ~ pattern  {print \$10}'`).$spacer;
}
}
$count++;
}
# Ausgabe der Werte
print $values;
}

Run Get-HDD_Temp.pl:


perl get-hdd_temp.pl 194 sda sdb

Ausgabe Get-HDD-Temp.pl:


sda:46 sdb:44

Hinweis – Cacti erfordert es wenn mehr als eine Rückgabe vorhanden ist zwischen diesen ein Whitespace / Leerzeichen zu setzen. Die Werte selbst werden mittels Doppelpunkt getrennt wobei der erste der Name ist und der folgende der Wert.Deshalb sieht die Formatierung entspr. aus.

2 Kommentare

  1. Maik

    Hallo,
    und warum nicht? Es ist zwar schnell geschrieben und ich bin bei weitem nicht der Perl-Pro, aber für meine Zwecke reichts. Was fehlt oder könnte besser gemacht werden ;)?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert