Perl Fehlermeldungen unterdrücken

Begonnen von emjott, 19 Januar 2014, 14:28:11

Vorheriges Thema - Nächstes Thema

emjott

Hallo FHEM-Gemeinde,

da dies mein erster Beitrag in diesem Forum ist, stelle ich mich kurz vor:
Ich (29 jähriger Informatiker) aus Rostock, betreibe seit ca. 3 Wochen meine FHEM Lösung einen Rasperry PI mit 3 HM_CC_RT_DN und 3 Funksteckdosen von Intertechno. FHEM habe ich erweitert um SYSINFO und YAHOO Wetteranzeige.

Ich bin sehr beeindruckt von der Leistungsfähigkeit und den Möglichkeiten die FHEM bietet. Ein großes Danke Schön an die Schöpfer der Lösung!

Zum Problem
Seit der Integration von SYSINFO erhalte ich auf der Konsole regelmäßig Fehler bzw. Warnungen welche den Betrieb der Lösung nicht beeinträchtigen, ich aber als störend empfinde. Gibt es deshalb eine Lösung um die Fehlermeldungen zu unterdrücken oder in eine eigene FHEM.log umzuleiten? Im Netz bin ich schon über einen Ansatz gestolpert und würde gerne mit...
open STDERR, '>>/var/log/fhem.log';
... die Ausgabe umleiten.
http://www.perlunity.de/perl/forum/thread_020091.shtml

Reicht es aus wenn ich den Befehl in die fhem.cfg einfüge
oder sollte ich das lieber in die 99_myUtils.pm eintragen
oder habt ihr schon eine bessere Lösung gefunden?

Hier noch die Fehlermeldungen die ich erhalte, falls es jemanden interessiert ;-)

root@himbeere:/home/pi# Useless use of string in void context at ./FHEM/10_CUL_HM.pm line 854, <$fh> line 38.
Useless use of string in void context at ./FHEM/10_CUL_HM.pm line 855, <$fh> line 38.
Useless use of string in void context at ./FHEM/10_CUL_HM.pm line 856, <$fh> line 38.
defined(@array) is deprecated at ./FHEM/42_SYSMON.pm line 934, <> line 22.
        (Maybe you should just omit the defined()?)
defined(@array) is deprecated at ./FHEM/42_SYSMON.pm line 997, <> line 22.
        (Maybe you should just omit the defined()?)
Useless use of a constant (1.09861228866811) in void context at ./FHEM/42_SYSMON.pm line 932, <> line 22.
Useless use of string in void context at ./FHEM/42_SYSMON.pm line 932, <> line 22.
Subroutine trim redefined at ./FHEM/42_SYSMON.pm line 1115, <> line 22.


root@himbeere:/home/pi#
root@himbeere:/home/pi#
root@himbeere:/home/pi# Use of uninitialized value $rPostfix in concatenation (.) or string at ./FHEM/42_SYSMON.pm line 992.
Use of uninitialized value $rPostfix in concatenation (.) or string at ./FHEM/42_SYSMON.pm line 992.
Use of uninitialized value $rPostfix in concatenation (.) or string at ./FHEM/42_SYSMON.pm line 992.
Use of uninitialized value $rPostfix in concatenation (.) or string at ./FHEM/42_SYSMON.pm line 992.
Use of uninitialized value $rPostfix in concatenation (.) or string at ./FHEM/42_SYSMON.pm line 992.
Use of uninitialized value $rPostfix in concatenation (.) or string at ./FHEM/42_SYSMON.pm line 992.
Use of uninitialized value $rPostfix in concatenation (.) or string at ./FHEM/42_SYSMON.pm line 992.


Vielen Dank im Voraus.

Matze

fritz

Hallo Matze,
Zitat von: emjott am 19 Januar 2014, 14:28:11
Gibt es deshalb eine Lösung um die Fehlermeldungen zu unterdrücken oder in eine eigene FHEM.log umzuleiten?
Selbstverständlich. TIMTOWTDI :-)
Meine sieht wie folgt aus (Linux-Server, musste sehen, ob's beim RasPi genauso geht)
Einfache Lösung, eien Befehlsdatei fhem-start mit dem einfachen Befehl:
perl fhem.pl fhem.cfg >>log/fhem.output.log 2>&1
Etwas komplizierter, aber komfortabler:
Eine zweite Datei fhem-stop mit:
perl fhem.pl 7072 "shutdown"
sowie in /etc/init.d eine Datei fhem, die die Kommandodateien aufruft. In der kannst Du z.B. den Benutzer, unter dem fhem laufen soll festlegen und weiteres. Ein Beispiel findest du im Forum oder im Wiki (ich weiss, jetzt nicht mehr genau woher ich das Original hatte).
Die Lösung hat den Vorteil, dass Du FHEM automatisch beim Hochfahren mitstarten kannst. Oder eben manuell schnell einmal /etc/init.d/fhem restart...
Um die Sache noch ein wenig zu verbessern habe ich mir noch ein Skript geschrieben, das die Log-Dateien "überwacht", weil es mir schon manchmal passiert ist, dass FHEM hing. Wenn dieses Skript mitbekommt, dass FHEM 10 Minuten lang nichts geloggt hat, schießt es FHEM (hart) ab und startet es neu mit /etc/init.d/fhem start
(Was mir beim letzten Mal aber nicht viel half, weil ich nach einem Reboot den Überwacher nicht automatisch gestartet hatte :-( aber ich bin ja lernfähig)

Hoffe, Dir etwas weitergeholfen zu haben - als Informatiker wirst Du ja wissen, an welchen Stellen Du Deine eigenen Datei- und Verzeichnisnamen einsetzen musst

<F>