Archiv verlassen und diese Seite im Standarddesign anzeigen : Scriptproblem unter Cacti
Hallo,
ich habe ein Problem mit eine Script unter Cacti.
Wenn ich das Script händisch von der Konsole aufrufe, wird mir die Temperatur schön angezeigt. Das Script sieht folgendermassen aus:
Perl-Script :
#!/usr/bin/perl -w
print `digitemp_DS9097 -o "%2C" -a -q`;
Wenn ich das Script von der Data Input Methode von Cacti ausführen lasse, wird im Logfile als Rückgabewert ein U angegeben. Siehe Log:
Logfile :
CMDPHP: Poller[0] Host[27] DS[461] CMD: perl /usr/share/cacti/scripts/digitemp.pl, output: U
Warum??
Weiss jemand Rat??
Gruss
ulange
darf ich raten: digitemp_DS9097 ist ein Script oder eine ausführbare Datei?
Dann gib in dem Aufruf mal den kompletten Pfad dahin an...
Hallo,
diigtemp_XXX ist eine ausführbare Datei.
Ich frage mich nur warum das Script händisch die richtigen Ergebnisse bringt.
Gruss
ulange
... weil die Datei da vermutlich im Pfad drin liegt?
baumgartner
27.11.06, 10:07
Wie sieht denn der Output von dem Skript aus?
Hallo,
wie oben beschrieben.
Das Script händisch auf der Console ausgeführt. liefert die Temperatur ordnungsgemäss zurück.
Aus Cacti heraus liefert das selbe Script laut Log ein "U" zurück.
???
Gruss
ulange
Ich weiss nicht, was Cacti wirklich erwartet, aber möglicherweise muss das Perl-Skript einen Rückgabe-Wert liefern statt einer Print-Ausgabe?
baumgartner
27.11.06, 10:39
nein, cacti erwartet einfach eine Zahl ohne \n oder sonstigen Zeichen. Aber Threadersteller hat es noch immer nicht geschafft den Output seines Scriptes zu posten!
Hallo,
es wird der Temperaturwert als Zahl zurückgeliefert. In dieser Form : 22.00001
Wenn ich mich in den vorherigen Post unverständlich ausgedrückt habe, möchte ich mich entschuldigen.
gruss
ulange
Hallo,
es wird der Temperaturwert als Zahl zurückgeliefert. In dieser Form : 22.00001
Wenn ich mich in den vorherigen Post unverständlich ausgedrückt habe, möchte ich mich entschuldigen.
gruss
ulange
Hast Du dein Skript nun mal im Sinne von marce verändert (Pfad in den Aufruf)?
Hallo,
ich habe das Script mal ungeschrieben. Es sieht jetzt so aus :
#!/usr/bin/perl -w
#print `digitemp_DS9097 -o "%2C" -a -q`;
print `/usr/share/cacti/scripts/digitemp_DS9097 -o "%2C" -a -q`;
Das Ausgabeergebnis bleibt gleich.
Gruss
ulange
baumgartner
27.11.06, 11:28
ich denk mal, dass es an dem Kommazeichen liegt. Schneid mal alles nach dem Punkt ab.
nein, cacti erwartet einfach eine Zahl ohne \n oder sonstigen Zeichen. Aber Threadersteller hat es noch immer nicht geschafft den Output seines Scriptes zu posten!
@TE: schon geprüft, ob vlt, \n hinterherkommt? (zB. digitemp.pl | xxd). Dann könntest du mit chomp() eingreifen.
Du hast die Methode auch richtig eingerichtet?
http://www.cacti.net/downloads/docs/html/data_input_methods.html
Also type=script und Parameter richtig angekündigt?
Zum Test ändere dein Perl-Skript doch mal in "print 22".
Hallo,
mit print 22 kommt das Ergebnis auch in CACti an.
Ich habe bemerkt das die Ausgabe aber anders ist als bei meiner Ausgabe.
Die 22 wird in der selben Zeile wie das darauffolgende Prompt geschrieben. Bei meiner Ausgabe wird die Zeile nochmal umgebrochen.
Kann das daran liegen, und wenn wie ändert man das?
Gruss
ulange
Hallo,
mit print 22 kommt das Ergebnis auch in CACti an.
Ich habe bemerkt das die Ausgabe aber anders ist als bei meiner Ausgabe.
Die 22 wird in der selben Zeile wie das darauffolgende Prompt geschrieben. Bei meiner Ausgabe wird die Zeile nochmal umgebrochen.
Kann das daran liegen, und wenn wie ändert man das?
Gruss
ulange
Zeilenumbrüche am Ende entfernt man zB mit der Funktion "chomp()", also etwas wie
print chomp(`digitemp.....`)
Dann Ergebnis mal in einen Hexviewer pipen, um zu sehen, was tatsächlich rauskommt (".... | xxd").
Ob der Dezimalpunkt noch stört, kannst du ja via "print 22.4" mal testen.
Die Version von tschloss ist deutlich schöner. Aber da ich mich damit beschäftigt habe, will ich trotzdem auch meine posten ;)
#!/usr/bin/perl -w
$string = `VAR=\$\(/usr/share/cacti/scripts/digitemp_DS9097 -o "%2C" -a -q\) && echo -n \$VAR`;
printf("%s", $string);
PS: Warum macht man sowas in Perl?
Hallo,
die Version mit Print 22.45 geht.Der Punkt scheint also nicht zu stören.
Die neue Version von suck bringt leider auch kein Ergebnis.
Ich möchte vielleicht nochmal auf den Aufruf der Datei zurückkommen. Die Datei DigitempXXX liegt in dem Ordner /usr/share/cacti/scripts/. Ist der Aufruf aus Cacti dann überhaupt richtig? Oder müssen die Pfade dann anders seinen?
Gruss
ulange
Gibt meine Version (aus der Shell aufgerufen) denn überhaupt was aus?
Hallo,
die Version mit Print 22.45 geht.Der Punkt scheint also nicht zu stören.
Die neue Version von suck bringt leider auch kein Ergebnis.
Auch mal das einfache "chomp(`/usr/.../digitemp .... `)" um deinen digitemp-Aufruf versucht?
Gibt meine Version (aus der Shell aufgerufen) denn überhaupt was aus?
Auf der Kommandozeile klappt dein Script, nur unter CACti nicht.:(
Auch mal das einfache "chomp(`/usr/.../digitemp .... `)" um deinen digitemp-Aufruf versucht?
So sah es zum Schluss aus :
#$output = `/usr/share/cacti/scripts/digitemp_DS9097 -o %C -a -q`;
#chomp($output);
print $output
So sah es zum Schluss aus :
#$output = `/usr/share/cacti/scripts/digitemp_DS9097 -o %C -a -q`;
#chomp($output);
print $output
Das ginge natürlich auch in einem Rutsch, aber ok.
Die "#" müssen natürlich weg ;)
Und was passiert dann?
Und schließlich nochmals:
wenn "print 22.4" geht und der Output deines pl-Skripts auf der Commandline
gut aussieht, dann kann es an versteckten Zeichen liegen.
Das kann man analysieren mit "./digitemp.pl | xxd" (wobei xxd ein Hexviewer ist, vielleicht hast du einen anderen (od war früher glaube ich üblich?).
Davon abgesehen, dass mich die "#" wundern, muss die eine Zeile so lauten:
$output = chomp($output); ..sonst wird die Variable gar nicht geändert. Oder (@tschloss) wird $output als Referenz übergeben?
Davon abgesehen, dass mich die "#" wundern, muss die eine Zeile so lauten: ..sonst wird die Variable gar nicht geändert. Oder (@tschloss) wird $output als Referenz übergeben?
Ja, das funktioniert "in place". Der Rückgabewert ist die Anzahl der entfernten Zeichen ;) (war mir aber auch nicht ganz klar).
Also ist der 3-Zeiler -ohne "#"- korrekt.
Hallo,
so kommt nur "1" als Ergebnis heraus.
$output = `/usr/share/cacti/scripts/digitemp_DS9097 -o %C -a -q`;
$output = chomp($output);
print $output
Was ist jetzt wieder falsch?
Gruss
Ulange
Ja, das funktioniert "in place". Der Rückgabewert ist die Anzahl der entfernten Zeichen ;) (war mir aber auch nicht ganz klar).
Also ist der 3-Zeiler -ohne "#"- korrekt.
... alles klar?
chomp ($Variable); - nicht mehr, nicht weniger...
Irgendwie eine schwere Geburt - und wir können bis hier ja nur hoffen, dass es an dem trailing newline liegt ;)
Hallo,
ok, das erklärt die 1 als Ergebnis.
Aber in CACTI kommt trotzdem nichts an :confused:
Gruss
ulange
... dann lass doch mal des Output zusätzlich auch in eine Datei schreiben - vielleicht sieht man darin dann ein bisserl mehr, vor allem, ob da noch "irgendwelcher" Müll sich rumtreibt...
Das kann man analysieren mit "./digitemp.pl | xxd" (wobei xxd ein Hexviewer ist, vielleicht hast du einen anderen (od war früher glaube ich üblich?). *empfehl* :D
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.