Thread Automatisches auslesen von Systemdaten,von denen nur bestimmte Zeilen in einer Textdatei ausgeben werden (46 answers)
Opened by guest at 2011-10-11 10:02

Jejerod
 2011-10-12 20:22
#153155 #153155
User since
2011-10-12
16 articles
BenutzerIn
[default_avatar]
Guest guest
Die Testdatei syteminfo.txt immer noch leer


print und Data::Dumper sind gute Freunde!

bei mir läuft folgendes:
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
52
53
54
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;

my %SysInfo;

get_cpu_info(\%SysInfo);
get_mem_info(\%SysInfo);

# Debug
print Dumper(\%SysInfo);

open(OUTFILE, "> ./sysinfo.txt") or die("$!");
foreach my $section (keys %SysInfo) {
    printf(OUTFILE "=== %s ===\n",$section);
    foreach my $name (keys( %{$SysInfo{$section}} )) {
        printf(OUTFILE "%s\t==>\t%s\n",$name, $SysInfo{$section}{$name});
    }
}
close(OUTFILE);
exit(0);

sub get_cpu_info {
    my ($refSi) = @_;

    open(CPUINFO, "/proc/cpuinfo") or die("$!");
    my @relevant_lines = grep(/(^processor|^cpu MHz)/, <CPUINFO>);
    close(CPUINFO);
    my $current_cpu;
    foreach my $info (@relevant_lines) {
        if ($info =~ /processor\s*:\s*(\d+)/) {
            $current_cpu = $1;
        }
        elsif ($info =~ /cpu MHz\s*:\s+(\S+)/) {
            $$refSi{'Central Processing Units'}{$current_cpu} = $1;
        }
    }
}
sub get_mem_info {
    my ($refSi) = @_;

    open(MEMINFO, "/proc/meminfo") or die("$!");
    my @relevant_lines = grep(/(^MemTotal|^MemFree|^Buffers|^Cached)/, <MEMINFO>);
    close(MEMINFO);
    foreach my $info (@relevant_lines) {
        if ($info =~ /^(\w+):\s+(\d+)\s+(\w+)$/) {
            my $name = $1;
            my $amount = $2;
            my $unit = $3;
            $$refSi{'Memory Information'}{$name} = "$amount $unit";
        }
    }
}


Ist übrigens eine OpenSuSE 11.3

Data::Dumper wirft aus:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
$VAR1 = {
'Memory Information' => {
'Cached' => '143120 kB',
'Buffers' => '177556 kB',
'MemTotal' => '502984 kB',
'MemFree' => '65356 kB'
},
'Central Processing Units' => {
'0' => '736.546'
}
};

(Ja, mein Heimserver hat nur so eine lahme CPU und so wenig RAM ;) )
Bei mir wird auch sysinfo.txt geschrieben. Aber selbst wenn sie leer wäre, wüsste ich das die Informationen korrekt gesammelt worden sind und kann den Fehler auf die Schreibfunktionen eingrenzen.

Edit: Wichtig ist auch, das /proc/cpuinfo unter "cpu MHz" die aktuelle Taktung der CPU angibt. Moderne CPUs takten runter wenn es nichts zu tun gibt.
Last edited: 2011-10-12 20:43:08 +0200 (CEST)

View full thread Automatisches auslesen von Systemdaten,von denen nur bestimmte Zeilen in einer Textdatei ausgeben werden