Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]12108[/thread]

Festplattenbelegung ausgeben+speichern

Leser: 2


<< |< 1 2 >| >> 17 Einträge, 2 Seiten
zottel335i
 2008-06-30 17:02
#111697 #111697
User since
2008-06-30
11 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich brauche ein Skript, welches die Speicherbelegung von Festplatten ausliest.

Ich habe es so geplant, dass dieses Skript auf einen zentralen Server abgelegt wird. Von dort aus aufgerufen, connectet es sich auf die Clients und ruft den entsprechenden Betriebssystembefehl auf. Dieser kommt dann in ne variable, .txt usw.

Meine Bitte an Euch ist mir eine Starthilfe, in Form eines geeigneten Howto oder auch ähnlichen Skript, zu geben.

Ich bräuchte eben erstmal ein Grundgerüst, dass ich dann auf meine Ansprüche anpassen kann.

danke,
Peter
murphy
 2008-06-30 17:41
#111699 #111699
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Wahrscheinlich ist es am einfachsten, mittels CPAN:Net::SSH oder CPAN:Net::SSH::Perl auf den entfernten Rechnern ein Kommando wie df auszuführen.
When C++ is your hammer, every problem looks like your thumb.
nepos
 2008-06-30 18:01
#111702 #111702
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Je nachdem, was das für Rechner sind, kann man sowas auch per SNMP abfragbar machen. Dann musst du nur noch per SNMP die Werte abrufen.
zottel335i
 2008-06-30 18:19
#111704 #111704
User since
2008-06-30
11 Artikel
BenutzerIn
[default_avatar]
hi,

das klingt doch soweit ganz gut. Ich möchte nochmal drauf hinweisen, dass ich nach einem geeigneten Howto suche bzw. einer fertigen Lösung, welche ich nur noch anpassen muss.

Sorry Jungs, die grosse Selbstreflektion werde ich mir nicht erarbeiten. ich möchte lediglich nen fertigen Codeschnipsel, den ich etwas bearbeiten kann.

Sowas müsste es doch haufenweise geben. Via google finde ich leider nichts brauchbares.


Ich möchte doch nur sehn, wie man das ungefähr macht und für meine Zwecke missbrauchen. Ich hoffe an meiner Bitte ist nichts auszusetzen.

Danke,
Peter
GwenDragon
 2008-06-30 19:39
#111706 #111706
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
Hast du denn keinerlei Erfahrung mit Perl?

Beispiel für SSH auf einen einzigen Klienten: http://search.cpan.org/~bnegrao/Net-SSH-Expect-1.0...

Du packst das o. g. Beispiel von Net-SSH-Expect in eine Subroutine und passt es für dich an.
In einer übergeordneten Schleife liest du aus einer Datei Server-IP (oder Domainname), Loginname und Passwort aus oder du packst es in einen Hash.
Dann musst du die Subroutine für jeden Client aufrufen.

Grobes Gerüst (ohne Gewähr):
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
use strict;
use warnings;
use Net::SSH::Expect;

while (my $line = <>) {
my ($s, $u, $p) = @_;
print "Server $s hat ", myDF($s,$u,$p), "frei\n";
}

sub myDF {
my ($server, $user, $passw) = @_;
my $ssh = Net::SSH::Expect->new (
host => $server,
password=> $passw,
user => $user,
raw_pty => 1
);
my $login_output = $ssh->login();

my $df = $ssh->exec("df -h /");
return $df;
}
zottel335i
 2008-07-01 13:34
#111717 #111717
User since
2008-06-30
11 Artikel
BenutzerIn
[default_avatar]
Hallo,

erstmal Danke für die Hilfe.

@GwenDragon
Ja, ich habe keinerlei Erfahrung bzgl. Perl

Wie ich leider feststellen muss, komme ich mit meinem Halbwissen nicht weiter.
Somit werde ich mich erstmal etwas in das Thema einlesen...

Ich habe hier :
http://www.roth.net/perl/adminmisc/#GetDriveSpace

genau das richtige gefunden. Könnt' Ihr mir jetzt erstmal helfen, wie ich mit einem Windowsrechner rede? Das ganze würde ich dann erstmal lokal ausprobieren.

Gruß,
zottel
zottel335i
 2008-07-14 13:19
#112091 #112091
User since
2008-06-30
11 Artikel
BenutzerIn
[default_avatar]
Hallo wieder mal,

nachdem ich mir nun einige Grundlagen bzgl. Perl angeeignet habe, ist der erste Teil meines "Analyse"-Skriptes auch schon fertig.

Ich kann nun die gewünschten Informationen abfragen. Allerdings nur für Windowssysteme.

Ich bitte Euch darum mal über das Skript zu schaun und evtl. unsauber programmierte Stellen mit mir zu besprechen.

Viel wichtiger wäre mir Hilfe bei Vorüberlegungen und der Implementation für eine Abfrage von Linuxsystemen.

Mein Skript sieht bisher wie folgt aus:


Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/usr/bin/perl

use strict;
use IO::File;
use Win32;                              
use Win32::AdminMisc;   
use Win32::OLE qw (in);
use Net::SSH;

# Ordner, in dem die CSV-Datei liegt
my $dir = '.';
# Trennzeichen in der Datei 
my $sep = ';';


# Datei oeffnen
open(DATEN,'<c:\perl\systems.txt') or die "Konnte die Datei nicht öffnen";
# Inhalte abgreifen und splitten
while (defined(my $zeile = DATEN->getline))
{
 my ($FQDN, $OS, $HDD, $USER, $PW) = split(/;/,$zeile);
 
 # Abfrage der WindowsHosts
  if($OS eq 'win')
 {
  # Verbindungsaufbau
  my $conn_object = Win32::OLE->new('WbemScripting.SWbemLocator');
  my $server  = $conn_object->ConnectServer($FQDN, "root\\cimv2", $USER, $PW);
  
  # Abfrage des Datentraeger
  my $total; my $free;
  ($total, $free) = Win32::AdminMisc::GetDriveSpace("$HDD:\\");
  $total = $total / 1024 /1024;         # MegaByte!
  $free = $free / 1024 /1024;           # MegaByte!
  
  printf ("\n");
  printf ("Speicher gesamt: $total MB\n");
  printf ("Speicher verfuegbar: $free MB\n");
  }
 
 # Abfrage LinuxHosts
 if($OS eq 'lin')
 {
 # Verbindungsaufbau
  ????????????????????????????
 }
 
 
}close(DATEN);
printf ("\n");
printf("schleife tot...");


Die Logininformationen (IP,PW, Festplatte) lasse ich aus einer Datei holen. Später werde ich die Ergebnisse auch noch in eine Datei zurückschreiben lassen(bisher Standardausgabe).

Was brauche ich nun um die Speicherbelegung eines bestimmten Unix-Volumes abzufragen?

Ich stelle mir da sowas vor, wie einen SSH connect auf die Maschine. Dann eine "Eingabe" von df -h o.ä. Anschliessend sollte dann der Wert der Speicherbelegung abgegriffen werden.

Völlig unklar ist mir, ob ich dazu einen SSH-Client brauche, auf den Perl zugreift oder ob die Lib das schon alles mitbringt.
Auch die Realisierung des Codes macht mir noch Gedanken...


Vielen Dank für die Hilfe

Grüße,
zottel
nepos
 2008-07-14 15:08
#112095 #112095
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Du musst doch nur mit CPAN:Net::SSH das df-Kommando auf den UNIX-Rechnern ausführen und die Ausgabe entsprechend weiterverarbeiten.
zottel335i
 2008-07-14 18:12
#112108 #112108
User since
2008-06-30
11 Artikel
BenutzerIn
[default_avatar]
das ganze soll aber auf einem Windowsserver laufen. Da das normale Net::SSH oder auch Net::SSH::Expect nur ein Wrapper ist, benötige doch einen SSH-Clienten?
Alternativ könnte ich das Package Net::SSH::Perl nutzen, so wie ich das verstanden habe. Bei letzterem scheitere ich derzeit an der Installation.

BTW: Einfach so mal was installieren und drauf losprogrammieren, läuft bei mir als Anfänger nicht...

Danke + Gruß
nepos
 2008-07-14 18:47
#112110 #112110
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ups sorry, das hatte ich übersehen. Woran scheitert denn die Installation von CPAN:Net::SSH::Perl?
<< |< 1 2 >| >> 17 Einträge, 2 Seiten



View all threads created 2008-06-30 17:02.