PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Scriptproblem unter Cacti



Seiten : [1] 2

ulange
27.11.06, 07:42
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

marce
27.11.06, 07:51
darf ich raten: digitemp_DS9097 ist ein Script oder eine ausführbare Datei?

Dann gib in dem Aufruf mal den kompletten Pfad dahin an...

ulange
27.11.06, 10:02
Hallo,

diigtemp_XXX ist eine ausführbare Datei.

Ich frage mich nur warum das Script händisch die richtigen Ergebnisse bringt.

Gruss
ulange

marce
27.11.06, 10:05
... weil die Datei da vermutlich im Pfad drin liegt?

baumgartner
27.11.06, 10:07
Wie sieht denn der Output von dem Skript aus?

ulange
27.11.06, 10:18
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

tschloss
27.11.06, 10:27
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!

ulange
27.11.06, 10:59
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

tschloss
27.11.06, 11:03
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)?

ulange
27.11.06, 11:17
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.

tschloss
27.11.06, 11:29
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".

ulange
27.11.06, 12:00
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

tschloss
27.11.06, 12:09
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.

suck
27.11.06, 12:20
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?

ulange
27.11.06, 12:42
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

suck
27.11.06, 12:48
Gibt meine Version (aus der Shell aufgerufen) denn überhaupt was aus?

tschloss
27.11.06, 12:54
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?

ulange
27.11.06, 13:04
Gibt meine Version (aus der Shell aufgerufen) denn überhaupt was aus?

Auf der Kommandozeile klappt dein Script, nur unter CACti nicht.:(

ulange
27.11.06, 13:06
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

tschloss
27.11.06, 13:18
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?).

suck
27.11.06, 13:19
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?

tschloss
27.11.06, 13:45
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.

ulange
27.11.06, 13:53
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

marce
27.11.06, 13:55
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...

tschloss
27.11.06, 14:01
Irgendwie eine schwere Geburt - und wir können bis hier ja nur hoffen, dass es an dem trailing newline liegt ;)

ulange
27.11.06, 14:02
Hallo,

ok, das erklärt die 1 als Ergebnis.

Aber in CACTI kommt trotzdem nichts an :confused:

Gruss

ulange

marce
27.11.06, 14:05
... 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...

tschloss
27.11.06, 14:05
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