Hallo,
seit einiger Zeit werden keine Daten mehr in meiner mySQL Datenbank geschrieben. Der Connect nach dem Start von FHEM scheint fehlerfrei zu funktionieren. Jedoch bekomme ich kurz nach dem Start von FHEM die folgende Fehlermeldung.
FHEM läuft auf einer Synology DS212j mit folgender mySQL DB
Server: Localhost via UNIX socket
Server-Typ: MariaDB
Server-Version: 5.5.54-MariaDB - Source distribution
Protokoll-Version: 10
2017.06.12 22:30:25 1: PERL WARNING: readdir() attempted on invalid dirhandle DIR at /usr/local/FHEM/share/fhem/FHEM/93_DbLog.pm line 388.
2017.06.12 22:30:25 1: PERL WARNING: closedir() attempted on invalid dirhandle DIR at /usr/local/FHEM/share/fhem/FHEM/93_DbLog.pm line 393.
Hat jemand eine Idee, wo ich meine Fehlersuche beginnen könnte?
Besten Dank schon mal! :)
Jens
Attribute expimpdir auf der DbLog gesetzt? Asonsten fhem/log Verzeichnis.
Sind die Berechtigungen drauf ok? Darf FHEM dort schreiben?
Das Attribut expimpdir habe ich bisher nicht gesetzt. Laut Referenz ist das standardmäßig auf "(global->modpath)/log/" gesetzt.
Meine Definition in der fhem.cfg sieht wie folgt aus:
define myDbLog DbLog /usr/local/FHEM/etc/db.conf .*:.*
attr myDbLog DbLogSelectionMode Include
Dann prüf mal die Berechtigungen auf "(global->modpath)/log/"
Die Berechtigung ist seitens FHEM meiner Meinung nach da. Die ganzen anderen Logfile werden dort aktuell abgelegt und gefüllt.
Zum Beispiel mein aktuelles Logfile "/usr/local/FHEM/var/log/fhem-2017-06.log" liegt dort. In dieses Logfile wird beispielsweise auch der genannte Fehler eingetragen.
Ich würde das Thema Berechtigung dennoch gern ausschließen, bin aber nicht so sattelfest im Thema Linux Berechtigung.
Wenn ich im Log-Pfad ls -l eingebe dann werden mir dort alle Dateien mit den entsprechenden Rechten ausgegeben.
Das sieht z.B. so aus "-rw-r--r-- 1 root root"
Was müsste ich in Bezug auf die Rechte genau prüfen?
Hallo Jens,
die Fehlermitteilung deutet, wie amenomade schon schrieb, auf ein Berechtigungsproblem in "(global->modpath)/log/" hin.
Mich verwirrt allerdings dass deine Berechtigungen mit root angezeigt werden:
Zitat"-rw-r--r-- 1 root root"
Bei mir gehören sie "fhem dialout". Möglicherweise ist dies aber der speziellen Installationsvariante auf Synology geschuldet. Das kann ich jetzt nicht beurteilen. Setzt dir expimpdir mal explizit auf den Pfad deines FHEM-Log-Verzeichnisses und schau ob der Fehler immer noch kommt.
Aber dein eigentliches Problem wird damit eher nicht zusammenhängen, weil expimpdir nur für die Funktion "set ... exportCache/importCachefile" genutzt wird.
Um dem Logging-Problem auf die Spur zu kommen solltest du uns mal einen verbose 5 Auszug von DbLog und ein List deines DbLog-Devices zur Verfügung stellen. Siehst du beim Start von FHEM Einträge dieser Art ?:
2017.06.12 08:21:42.587 3: DbLog LogDB: Creating Push-Handle to database mysql:database=fhemtest;host=192.168.2.10;port=3306 with user fhemtest
2017.06.12 08:21:42.678 3: DbLog LogDB: Push-Handle to db mysql:database=fhemtest;host=192.168.2.10;port=3306 created
VG
HI,
erstmal warum machst du 2 Posts zum selben Thema auf? https://forum.fhem.de/index.php?topic=72923.0 (https://forum.fhem.de/index.php?topic=72923.0)
Zitat von: jemu75 am 12 Juni 2017, 23:17:57
Die Berechtigung ist seitens FHEM meiner Meinung nach da. Die ganzen anderen Logfile werden dort aktuell abgelegt und gefüllt.
Zum Beispiel mein aktuelles Logfile "/usr/local/FHEM/var/log/fhem-2017-06.log" liegt dort. In dieses Logfile wird beispielsweise auch der genannte Fehler eingetragen.
Ich würde das Thema Berechtigung dennoch gern ausschließen, bin aber nicht so sattelfest im Thema Linux Berechtigung.
Wenn ich im Log-Pfad ls -l eingebe dann werden mir dort alle Dateien mit den entsprechenden Rechten ausgegeben.
Das sieht z.B. so aus "-rw-r--r-- 1 root root"
Was müsste ich in Bezug auf die Rechte genau prüfen?
Unter welchem User läuft FHEM? Hier wird vermutet dass es unter fhem läuft und dann wäre es vermutlich ein Berechtigungsproblem, läuft FHEM aber unter root ist das unsauber aber wahrscheinlich kein Berechtigungsthema.
ps -ef | grep -i fhem
--> Output posten.
Mach zusätzlich mal einen
ls -l
in deinem log-Verzeichnis und poste den gesamten Output, vor allem die Zeilen mit '.' und '..' um zu sehen ob hier dein Beispiellog nur für Root zugänglich ist oder das gesamte Verzeichnis.
So, da bin ich wieder ;)
Mein FHEM läuft unter dem User root anbei mal der Auszug aus FHEM -> Global -> motd
WEB,WEBphone,WEBtablet has no associated allowed device with basicAuth.
telnetPort has no associated allowed device with password/globalpassword.
Running with root privileges.
Restart FHEM for a new check if the problem is fixed,
or set the global attribute motd to none to supress this message.
die o.g. Befehle liefern folgendes Ergebnis:
1) ps -ef | grep -i fhem
ash-4.3# cd log
ash-4.3# ps -ef | grep -i fhem
root 10482 7183 0 09:38 pts/1 00:00:00 grep -i fhem
root 25395 1 0 Jun13 ? 00:11:44 /bin/perl /usr/local/FHEM/bin/fhem.pl /usr/local/FHEM/etc/fhem.cfg
2) ls -l
ash-4.3# ls -l
total 194348
-rw-r--r-- 1 root root 0 Jun 27 2016 -2015.log
-rw-r--r-- 1 root root 0 Dec 29 16:37 -2016.log
-rw-r--r-- 1 root root 60379 Jun 13 23:00 eventTypes.txt
-rw-r--r-- 1 root root 74507 Jun 27 2016 fhem-2015-01.log
-rw-r--r-- 1 root root 28038 Jun 27 2016 fhem-2015-02.log
-rw-r--r-- 1 root root 39727 Jun 27 2016 fhem-2015-03.log
-rw-r--r-- 1 root root 17117064 Jun 27 2016 fhem-2015-04.log
-rw-r--r-- 1 root root 1112244 Jun 27 2016 fhem-2015-05.log
-rw-r--r-- 1 root root 1098499 Jun 27 2016 fhem-2015-06.log
-rw-r--r-- 1 root root 4736070 Jun 27 2016 fhem-2015-07.log
-rw-r--r-- 1 root root 284077 Jun 27 2016 fhem-2015-08.log
-rw-r--r-- 1 root root 3070005 Jun 27 2016 fhem-2015-09.log
-rw-r--r-- 1 root root 3658218 Jun 27 2016 fhem-2015-10.log
-rw-r--r-- 1 root root 1518295 Jun 27 2016 fhem-2015-11.log
-rw-r--r-- 1 root root 2977357 Jun 27 2016 fhem-2015-12.log
-rw-r--r-- 1 root root 4649045 Jun 27 2016 fhem-2016-01.log
-rw-r--r-- 1 root root 3287243 Jun 27 2016 fhem-2016-02.log
-rw-r--r-- 1 root root 7908814 Mar 31 2016 fhem-2016-03.log
-rw-r--r-- 1 root root 5106288 Apr 30 2016 fhem-2016-04.log
-rw-r--r-- 1 root root 7770246 May 31 2016 fhem-2016-05.log
-rw-r--r-- 1 root root 4660513 Jun 30 2016 fhem-2016-06.log
-rw-r--r-- 1 root root 3037802 Jul 31 2016 fhem-2016-07.log
-rw-r--r-- 1 root root 5341795 Aug 31 2016 fhem-2016-08.log
-rw-r--r-- 1 root root 294639 Sep 30 2016 fhem-2016-09.log
-rw-r--r-- 1 root root 320893 Oct 31 2016 fhem-2016-10.log
-rw-r--r-- 1 root root 362429 Nov 30 2016 fhem-2016-11.log
-rw-r--r-- 1 root root 1089505 Dec 31 23:52 fhem-2016-12.log
-rw-r--r-- 1 root root 1099574 Jan 31 23:57 fhem-2017-01.log
-rw-r--r-- 1 root root 627882 Feb 28 23:52 fhem-2017-02.log
-rw-r--r-- 1 root root 503573 Mar 31 23:16 fhem-2017-03.log
-rw-r--r-- 1 root root 220149 Apr 30 23:39 fhem-2017-04.log
-rw-r--r-- 1 root root 277435 May 31 23:46 fhem-2017-05.log
-rw-r--r-- 1 root root 846670 Jun 16 09:33 fhem-2017-06.log
-rw-r--r-- 1 root root 172649 Jun 16 09:03 fhem.save
-rw-r--r-- 1 root root 212 Feb 20 2016 fhem.save # where to save the state of the devices
3) Auszug Logfile nach "shutdown restart" mit Global -> Verbose = 5
2017.06.16 09:49:14 5: Cmd: >define myDbLog DbLog /usr/local/FHEM/etc/db.conf .*:.*<
2017.06.16 09:49:14 5: Loading /usr/local/FHEM/share/fhem/FHEM/93_DbLog.pm
2017.06.16 09:49:14 3: DbLog myDbLog: Creating Push-Handle to database mysql:database=fhem;host=localhost;port=3306 with user fhemuser
2017.06.16 09:49:15 3: DbLog myDbLog: Push-Handle to db mysql:database=fhem;host=localhost;port=3306 created
2017.06.16 09:49:15 5: Cmd: >attr myDbLog DbLogSelectionMode Include<
2017.06.16 09:57:55 4: DbLog myDbLog -> ################################################################
2017.06.16 09:57:55 4: DbLog myDbLog -> ### New database processing cycle - synchronous ###
2017.06.16 09:57:55 4: DbLog myDbLog -> ################################################################
2017.06.16 09:57:55 4: DbLog myDbLog -> DbLogType is: History
2017.06.16 09:57:55 5: DbLog myDbLog -> Primary Key used in fhem.history: none
2017.06.16 09:57:55 5: DbLog myDbLog -> Primary Key used in fhem.current: none
2017.06.16 09:57:55 4: DbLog myDbLog -> processing event Timestamp: 2017-06-16 09:57:55, Device: HM_xxxxxx, Type: CUL_HM, Event: humidity: 70, Reading: humidity, Value: 70, Unit: %
2017.06.16 09:57:55 4: DbLog myDbLog -> processing event Timestamp: 2017-06-16 09:57:55, Device: HM_xxxxxx, Type: CUL_HM, Event: temperature: 21.5, Reading: temperature, Value: 21.5, Unit: °C
2017.06.16 09:57:55 4: DbLog myDbLog -> 2 of 2 events inserted into table history
2017.06.16 09:57:56 5: DbLog myDbLog -> DbLog_Push Returncode: 0
Ich habe das Thema gerade selbst aufgelöst. Mit dem Thema Rechte waren wir/ich komplett auf dem Holzweg. Ich hatte lediglich in meine current-Tabelle geschaut und gesehen, dass dort seit Januar nix mehr aktualisiert wurde. Was ich nicht gemacht habe, mal in meine history-Tabelle zu schauen. Dort werden alle Werte mitgeschrieben. In der Doku habe ich eben auch folgendes gefunden:
Zitat
DbLogType
attr <device> DbLogType [Current|History|Current/History]
This attribute determines which table or which tables in the database are wanted to use. If the attribute isn't set, the table history will be used as default.
Scheinbar wurde das mit einem Update vor längerer Zeit mal geändert.
Auf die Lösung hätte ich selbst kommen können. :-\
Danke auf jeden Fall für eure Unterstützung! :)
Zitat von: kadettilac89 am 13 Juni 2017, 06:33:06
Unter welchem User läuft FHEM? Hier wird vermutet dass es unter fhem läuft und dann wäre es vermutlich ein Berechtigungsproblem, läuft FHEM aber unter root ist das unsauber aber wahrscheinlich kein Berechtigungsthema.
ps -ef | grep -i fhem
Hatte ich mir gedacht, wie sonst sollte fhem ein root-only file schreiben können. Also läuft es unter root, auch wenn das Thema erledigt ist würde ich dir empfehlen fhem nicht unter root laufen zu lassen. Beim Start prüft FHEM ob ein user fhem vorhanden ist. Wenn ja wird FHEM mit diesem User gestartet, wenn nicht der root.
Zum dem root-Thema gibt es hier genügend Posts, wirst sicher fündig.