BSDForen.de  

Zurück   BSDForen.de > FreeBSD > FreeBSD - Anwendungen und Ports

Antwort
 
Themen-Optionen Thema bewerten Ansicht
Alt 05.08.2012, 16:37   #1
Mardor
Registered User
 
Registrierungsdatum: Nov 2007
Ort: München
Beiträge: 200
expected timestamp not found in data source

Hallo,

nachdem ich nun Stunden um Stunden damit verbracht habe das Problem zu lösen und keinen Schritt weiter gekommen bin hoffe ich hier einen Tipp zu erhalten.

Ich möchte RRD Tool benutzen, dies funktioniert auch soweit d.h. ich sehe den Graphen etc. sobald ich im folgenden Script einen festen Übergabewert eintrage (in diesem Fall 64. Sobald ich aber den Wert übergebe das per "ps aux | wc -l" raugekommen ist erhalte ich folgende Fehlermeldung:

Code:
ERROR: expected timestamp not found in data source from 66
Die Zahl 66 entspricht der Anzahl der aktuellen Prozesse.

Code:
#!/usr/bin/perl # Definition $PATH = "/data/rrdtool/process"; # Command $NUM_PROCESS = `ps aux | wc -l`; chomp($NUM_PROCESS); # RRDTool update `/usr/local/bin/rrdtool update $PATH/process.rrd N:$NUM_PROCESS`; # `/usr/local/bin/rrdtool update $PATH/process.rrd N:64`;
Ich habe bereits das gleiche Problem wenn ich ein Shell Script benutze.

Wenn ich anstatt des ps Befehls folgenden Befehl eingebe bekomme ich auch keine Fehlermeldung.

Code:
$NUM_PROCESS = "55";
Ich denke das dies irgend ein winziges Problem ist, aber ich komme einfach nicht drauf.

Gruß Mardor
Mardor ist offline   Mit Zitat antworten
Alt 05.08.2012, 18:56   #2
h^2
Moderators
 
Registrierungsdatum: Sep 2009
Beiträge: 875
Bei
ps aux | wc -l
sind bei mir noch Leerzeichen/tabs vor der Zahl. Vielleicht solltest du die wegmachen (intuitiv würd ich das mit awk machen, geht aber sicher einfacher).
__________________
meine ports · mein zuhause · mein blog
h^2 ist offline   Mit Zitat antworten
Alt 05.08.2012, 19:44   #3
Mardor
Registered User
 
Registrierungsdatum: Nov 2007
Ort: München
Beiträge: 200
Hi,

vielen Dank für den Tipp. Ich habe die Leerzeichen über regex entfernt. Leider hat es nicht geholfen, ich bekomme immer noch die Fehlermeldung:


Code:
#!/usr/bin/perl # Definition $PATH = "/data/rrdtool/process"; # Command $NUM_PROCESS = `ps aux | wc -l`; chomp($NUM_PROCESS); $NUM_PROCESS =~ s/ //; # RRDTool update `/usr/local/bin/rrdtool update $PATH/process.rrd N:$NUM_PROCESS`;
Code:
ERROR: expected timestamp not found in data source from 61
Hättest du noch eine Idee oder einen Tipp ?

Gruß Mardor
Mardor ist offline   Mit Zitat antworten
Alt 05.08.2012, 20:05   #4
h^2
Moderators
 
Registrierungsdatum: Sep 2009
Beiträge: 875
Ich glaube deine RE fänngt nur spaces und keine tabs ab. Aber kannst du $NUM_PROCESS nicht byteweise ausgeben (ich kenne mich mit perl nicht aus), dann wüsstest du doch was drin steht?
__________________
meine ports · mein zuhause · mein blog
h^2 ist offline   Mit Zitat antworten
Alt 05.08.2012, 20:21   #5
Mardor
Registered User
 
Registrierungsdatum: Nov 2007
Ort: München
Beiträge: 200
Hallo,

ich habe jetzt die Tabs rausgenommen und dann noch zusätzlich alle anderen Sonderzeichen, leider ohne Erfolg.


Code:
#!/usr/bin/perl # Definition $PATH = "/data/rrdtool/process"; # Command $NUM_PROCESS = `ps aux | wc -l`; chomp($NUM_PROCESS); $NUM_PROCESS =~ s/ //; $NUM_PROCESS =~ s/\t//; $NUM_PROCESS =~ s/\s//; # RRDTool update `/usr/local/bin/rrdtool update $PATH/process.rrd N:$NUM_PROCESS`;

Gruß Mardor
Mardor ist offline   Mit Zitat antworten
Alt 05.08.2012, 20:22   #6
Mardor
Registered User
 
Registrierungsdatum: Nov 2007
Ort: München
Beiträge: 200
Zitat:
Ich glaube deine RE fänngt nur spaces und keine tabs ab. Aber kannst du $NUM_PROCESS nicht byteweise ausgeben (ich kenne mich mit perl nicht aus), dann wüsstest du doch was drin steht?
Was meinst du genau mit byteweise ?
Mardor ist offline   Mit Zitat antworten
Alt 05.08.2012, 21:07   #7
Yamagi
Possessed With Psi Powers
 
Benutzerbild von Yamagi
 
Registrierungsdatum: Apr 2004
Ort: Schleswig-Holstein
Beiträge: 6.602
Yamagi eine Nachricht über ICQ schicken
Deine RE wird so nicht funktionieren. Das Minimum um eine beliebige Anzahl Spaces und Tabs am Anfang(!) der Zeile zu entfernen wäre:
Code:
s/^\s*//g
^ -> Zeilenanfang (damit wir nichts hinter der Zahl wegholzen)
\s -> Greift alle Leerzeichen (Whitespace, Tab, Newline, evtl. noch mehr Abarten)
* -> Beliebige viele \s
/g -> Global, wende die Regex so oft an, bis sie nicht mehr greift. Hier nicht zwingend notwendig, schadet aber auch nicht.

Davon abgesehen, würde ich dir ganz stark raten, Perl in den "strict"-Mode zu schalten. Das Script initialisiert z.B. seine Variablen nicht. Das macht es nicht nur schwer lesbar, ist stattdessen auch potentiell gefährlich. Insgesamt würde es denn grob so aussehen. Ist allerdings ungetestet:
Code:
!/usr/bin/env perl use warnings; use strict; # Hier könnte man auch ein Perl-Modul nutzen my $num_proc = `ps aux | wc -l`; # Leerzeichen davor weg $num_proc =~ s/^\s*//g; # Leerzeichen danach weg $num_proc =~ s/\s*$//g; # (Die beiden RE könnte man auch in eine kombinieren, # aber das ist dann nicht mehr klar verständlich, bzw. # verlangt etwas tiefergehendes Verständnis der RE # Engine) `/usr/local/bin/rrdtool update $PATH/process.rrd N:$num_proc`
__________________
Eure Tastatur verfügt nicht umsonst über zwei Shift-Tasten! Benutzt sie bitte, denn sonst ist es mir fast unmöglich euere Posts zu entziffern.

Yamagi ist offline   Mit Zitat antworten
Alt 06.08.2012, 04:27   #8
Mardor
Registered User
 
Registrierungsdatum: Nov 2007
Ort: München
Beiträge: 200
Hallo Yamagi und h^2,

vielen vielen Dank für eure Hilfe. Jetzt funktioniert das Script ohne Problem.


Eine Verständnisfrage zu meinem Script hätte ich noch:

- Welchen Grund hat es in einer Zeile die Sonderzeichen vor und in einer die Sonderzeichen danach zu löschen.

- Warum hat mein Script in diesem Fall nicht funktioniert ?


Gruß Mardor
Mardor ist offline   Mit Zitat antworten
Alt 06.08.2012, 07:29   #9
Yamagi
Possessed With Psi Powers
 
Benutzerbild von Yamagi
 
Registrierungsdatum: Apr 2004
Ort: Schleswig-Holstein
Beiträge: 6.602
Yamagi eine Nachricht über ICQ schicken
Zitat:
Zitat von Mardor
- Welchen Grund hat es in einer Zeile die Sonderzeichen vor und in einer die Sonderzeichen danach zu löschen.
Einzig und allein, um die RE lesbarer zu bekommen. Es in einer Zeile zu machen,wäre schneller, da nur eine RE übersetzt und angewandt werden muss, aber für dein Script sind die paar CPU-Zyklen sehr wahrscheinlich irrelevant. Es wäre:
Code:
$num_proc =~ s/^\s*(\d+)\s*$/$1/;
$1 ist ein Backtracking-Bucket, der von der ersten definierten Gruppe "(\d+)" - greift einige beliebige Anzahl Ziffern, mindestens aber eine - gefüllt wird. perlre erklärt es halbwegs verständlich: http://perldoc.perl.org/perlre.html#Backtracking

Zitat:
Zitat von Mardor
- Warum hat mein Script in diesem Fall nicht funktioniert ?
Weil deine RE falschen waren:
- "$NUM_PROCESS =~ s/ //;" greift das erste Leerzeichen, was er findet und entfernt es.
- "$NUM_PROCESS =~ s/\t//;" greift des ersten Tab, den er findet und entfernt ihn.
- "$NUM_PROCESS =~ s/\s//;" greift das erste Tab / Leerzeichen / Newline und entfernt es.
Es reicht aber nicht aus, nur das erste Zeichen zu entfernen. Es müssen alle vor und nach dem gewünschten Wert entfernt werden. Sonst sieht der CMD-Parser vom rrdtool etwas wie "N: 123" in seinem Aufruf und hält die Zahl 123 für einen eigenen Wert ohne Bezug zum N:. Das ist dann falscher Syntax und geht nicht.
__________________
Eure Tastatur verfügt nicht umsonst über zwei Shift-Tasten! Benutzt sie bitte, denn sonst ist es mir fast unmöglich euere Posts zu entziffern.

Yamagi ist offline   Mit Zitat antworten
Alt 06.08.2012, 09:40   #10
KobRheTilla
used register
 
Registrierungsdatum: Jan 2011
Beiträge: 261
Zitat:
Zitat von Yamagi Beitrag anzeigen
Einzig und allein, um die RE lesbarer zu bekommen. Es in einer Zeile zu machen,wäre schneller, da nur eine RE übersetzt und angewandt werden muss, aber für dein Script sind die paar CPU-Zyklen sehr wahrscheinlich irrelevant. Es wäre:
Code:
$num_proc =~ s/^\s*(\d+)\s*$/$1/;
Man kann auch einfach jedes Zeichen entfernen, dass keine Zahl ist:

Code:
s/[^0-9]+//g
Rob
KobRheTilla ist offline   Mit Zitat antworten
Alt 06.08.2012, 09:53   #11
Yamagi
Possessed With Psi Powers
 
Benutzerbild von Yamagi
 
Registrierungsdatum: Apr 2004
Ort: Schleswig-Holstein
Beiträge: 6.602
Yamagi eine Nachricht über ICQ schicken
Ja, das wäre natürlich noch einfacher und vor allem robuster. Hatte ich nun gar nicht bedacht.
__________________
Eure Tastatur verfügt nicht umsonst über zwei Shift-Tasten! Benutzt sie bitte, denn sonst ist es mir fast unmöglich euere Posts zu entziffern.

Yamagi ist offline   Mit Zitat antworten
Alt 08.08.2012, 09:18   #12
Mardor
Registered User
 
Registrierungsdatum: Nov 2007
Ort: München
Beiträge: 200
Hi Yamagi,

vielen dank für die super ausführliche Erklärung. Ich habe verstanden warum mein Script nicht funktionieren konnte.

Auch vielen Dank an h^2 und KobRheTilla.

Gruß Mardor
Mardor ist offline   Mit Zitat antworten
Antwort


Dieses Thema betrachten zurzeit 1 Personen. (0 registrierte Benutzer und 1 Gäste)
 
Themen-Optionen
Ansicht Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist An.
Smileys sind An
[IMG] Code ist An
HTML-Code ist Aus
Gehe zu

Ähnliche Themen
Thema Erstellt von Forum Antworten Letzter Beitrag
x11-einrichten. wem faellt was auf? dettus OpenBSD - Allgemein 1 09.11.2009 22:37
Konfiguration snort xStrak OpenBSD - Pakete und Anwendungen 0 25.05.2009 14:39
Problem mit Kernelbau fatman NetBSD - Allgemein 5 11.02.2006 17:32
Hiiilfe: Nach Crash irreguläres Verhalten (Firefox, Quanta) SteWo OpenBSD - Pakete und Anwendungen 4 06.05.2005 22:16
sound und tv orangutanklaus FreeBSD - Allgemein 12 19.10.2004 16:24


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:57 Uhr.


Powered by vBulletin (Deutsch)
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.