Am Donnerstag, 26. Juli 2007 schrieb David Haller:
Hallo,
Am Mit, 25 Jul 2007, gooly@gmx.at schrieb: [..]
Es gibt aber auch ein Debugging (siehe laptop_mode): anschalten: Konsole oder bash: echo 1 > /proc/sys/vm/block_dump Perl: system('echo 1 > /proc/sys/vm/block_dump');# switch on rw log
Besser:
sysctl -w vm.block_dump=1
Bzw. gleich in der /etc/sysctl.conf eintragen. Hmm, das 'logging' soll vom programm an und abgeschaltet werden , da macht ein conf-Eintrag nicht wirklich Sinn.
Mit perl besser:
==== open(PROC, ">/proc/sys/vm/block_dump") or die "$!\n"; print PROC 1; close(PROC) or die "$!\n"; ====
system sollte man eher vermeiden warum? und wenn doch sollte man den Rückgabewert auswerten!
auslesen: Konsole Bash: dmesg |grep READ >/tmp/hd.log 2>&1 dmesg |grep WRITE >/tmp/hd.log 2>&1
Damit überschreibt letzteres aber ersteres. Ich weiß, ich benutze es ja auch nicht genau hintereinander..
Perl: system ( "dmesg |grep READ >$f 2>&1");
*urgsl* warum?
==== open(DMESG, "dmesg |") or die "$!\n"; print grep( /READ|WRITE/, <DMESG>); close(DMESG) or die "$!\n"; ==== und warum ist das besser? Ich brauch nur eine Zeile, Du 3; Perl gibt Speicher nicht wirklich wieder her, ich hab daher alles 'externalisiert' und der Speicher ist dann wieder frei.. Dies File kann sehr groß werden und das Programm soll quasi ewig laufen..
und hier mein kl. script um den Ausdruck zu konzentrieren #!/usr/bin/perl use strict; use warnings; # Einlesen in einen Perl Hash und ausdrucken, # Mehrfach Nennungen fallen so weg :) my %show; my $f = '/tmp/hd.log'; system ( "dmesg |grep READ > $f 2>&1"); if ( -s $f > 10 ) {
Wieso 10 Byte?
open F, "< $f" or warn "Can't open READ_File:$f< :$!\n";
Du liest aber trotzdem? *waaah*
Naja, lesen geht doch nicht und Perl erzeugt eine Fehlermeldung, aber dies Programm und seine Kinder laufen weiter, nur das hd-Aufwachdebugging funktioniert halt nicht. Klar, nicht schön, aber möglich und funktioniert.
foreach (<F>) { $show{READ}{"$1_$3"} = "$2 $3\t$1\n" if (/^(.+?): (.+?)(hda[23])[\n\r]*/) } close(F); } system ( "dmesg |grep WRITE > $f 2>&1"); if ( -s $f > 10 ) { open F, "< $f" or warn "Can't open WRITE_File:$f< :$!\n"; foreach (<F>) { $show{WRITE}{"$1_$3"} = "$2 $3\t$1\n" if (/(.+?):(. +?)(hda[23])[\n\r]*/) } close(F); } my $prt; exit 0 unless (exists $show{READ} || exists $show{WRITE} ); foreach (sort keys %{$show{READ}}) { $prt .= 'hd: '.$show{READ}{$_} } foreach (sort keys %{$show{WRITE}}) { $prt .= 'hd: '.$show{WRITE}{$_} } if ($prt) { open F, "> $f" or warn "Can't open hd-log:$f:$!\n"; print F $prt; close(F); } exit 0;
*urgsl* Ich block da nicht durch, v.a. was du da eigentlich machen willst, daher nur "in grob".
Ich will ja nur wissen welche Programme durch READ oder WRITE die hd aufgeweckt haben ergo brauch ich sie nur einmal und nicht jedesmal mit jedem Knötchen den sie gelesen oder geschrieben haben: Perls Hash.
==== open(DMESG, "dmesg |") or die "$!\n"; while(<DMESG>) { next unless /READ|WRITE/; if (/(.+?):(.+?)(hda[23])[\n\r]*/) { print "hd: $2 $3\t$1\n"; } } close(DMESG) or die "$!\n"; ====
Puuhh, so bekam ich 100.000 Einträge vom pdflush und kjournald..
ein hadparm -S1 /dev/hda schickt die platte noch nicht mal in den schlaf
naja, da muss wohl ein Blank dazwischen, ich vermute -S1 ist keine Option, -S 1 dann schon.
Nö.
==== # hdparm -S1 /dev/hdc
/dev/hdc: setting standby to 1 (5 seconds) ====
dann erhalte ich die folgende Fehlermeldung: ./test.pl: line 1: my: command not found ./test.pl: line 2: syntax error near unexpected token `$state' ./test.pl: line 2: ` if (hd_is($state)) { print "$state\n"} else {print "NOT $state\n"}'
Ist etwa perl nicht installiert ?
Perl Programm haben eine ziemlich wichtige erste Zeile: #!/usr/bin/perl
Nö. Die ist nur zu automatisch ausführen nötig. Ein
perl ./test.pl
wird immer gehen. ackn Wenn die Zeile fehlt, dann wird das Script durch die shell ausgeführt und das gibt dann obige Fehler. So hatte er es angewendet.. calli
-- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org