Ich habe gerade FHEM (5.6, glaube ich) aus dem Stable-Repository auf einem neu aufgesetzten Ubuntu 14.04 installiert. Nach der Installation schlug der Start über
/etc/init.d/fhem start
fehl mit einer Fehlermeldung, die mit
ZitatCan't open ./log/[...]
begann. Ein wenig Suche auf dem System und bei Google hat ergeben, dass bei der Installation aus dem Repository die Rechte falsch gesetzt werden. In /opt/fhem/log/ waren die Dateien fhem-2015-01.log, fhem-2015-01.logattr und fhem.save Benutzer "fhem", Gruppe "dialout" zugeordnet. Ein Vergleich mit den anderen Dateien ließ mich vermuten, dass die Gruppe nicht "dialout", sondern "root" sein sollte.
cd /opt/fhem/log
chown fhem:root *
Hat das Problem gelöst. Da es sich um ein neues System handelte, ist der Hinweis oben vielleicht hilfreich, um den Installer anzupassen (keine Ahnung, wie sowas geht...) Und wenn nicht, hilft es vielleicht nachfolgenden Generationen von Nutzern, die beim Googlen auf diesen Beitrag stoßen. :)
Bei der Installation aus dem Repository werden die Rechte für das gesamte Verzeichnis /opt/fhem und alle darin enthaltenen Unterverzeichnisse gesetzt:
chown -R fhem:root /opt/fhem
Da fhem die Logdateien selbst anlegt, hat fhem auch die Rechte, jederzeit in die Datei schreiben zu dürfen.
Solche Fehler wie von Dir beschrieben, treten meistens dann auf, wenn man als root irgendwelche Änderungen innerhalb des fhem-Verzeichnisses ausführt und vergisst, danach die Rechte richtig zu setzen.
Und Ubuntu verhält sich in manchen Sachen ohnehin "komisch".
Ich hatte gerade das Problem, dass hier einige Logfiles nicht mehr geschrieben wurden. Die Suche hat ergeben, dass schon wieder die Rechte nicht stimmten.
root@fhem:/opt/fhem/log# ls -l
insgesamt 76
-rw-r--r-- 1 fhem root 0 Nov 9 14:16 empty_file.txt
-rw-r--r-- 1 fhem dialout 0 Jan 15 00:33 eventTypes.txt
-rw-r--r-- 1 fhem dialout 12599 Jan 15 20:36 Fenster_UG_Buero-2015.log
-rw-r--r-- 1 fhem root 14085 Jan 16 12:56 fhem-2015-01.log
-rw-r--r-- 1 fhem root 42 Jan 14 22:50 fhem-2015-01.logattr
-rw-r--r-- 1 fhem root 21079 Jan 15 23:38 fhem.save
-rw-r--r-- 1 fhem dialout 7129 Jan 15 20:48 Heizung_UG_Buero-2015.log
-rw-r--r-- 1 fhem dialout 5772 Jan 15 20:48 Heizung_UG_Gast-2015.log
Ungefähr zu dieser Zeit hatte ich im Webinterface die Geräte umbenannt, für die die Logfiles mit falschen Rechten (dialout statt root) da rumliegen. Es scheint, dass Dateien, die FHEM selbst anlegt, die falschen Rechte erhalten, quasi verlässlich und reproduzierbar.
Kann ich da irgendwo dran drehen? Perl kann ich gaaanich.
Das Problem selbst ließ sich natürlich über ein
chown fhem:root *
wieder lösen. Würde das nur ungern hier als Cronjob einrichten. ;D
Edith sagt: Das Verhalten ist in der Tat reproduzierbar. Es kommt aber nicht vom rename, sondern vom neuen Gerät. Gerade einen neuen Fenstersensor angelernt:
root@fhem:/opt/fhem/log# ls -l
insgesamt 80
-rw-r--r-- 1 fhem dialout 2401 Jan 16 13:58 CUL_HM_HM_SEC_SCo_35C07D-2015.log
-rw-r--r-- 1 fhem root 0 Nov 9 14:16 empty_file.txt
-rw-r--r-- 1 fhem root 0 Jan 15 00:33 eventTypes.txt
-rw-r--r-- 1 fhem root 12599 Jan 15 20:36 Fenster_UG_Buero-2015.log
-rw-r--r-- 1 fhem root 15950 Jan 16 13:58 fhem-2015-01.log
-rw-r--r-- 1 fhem root 42 Jan 14 22:50 fhem-2015-01.logattr
-rw-r--r-- 1 fhem root 21127 Jan 16 13:56 fhem.save
-rw-r--r-- 1 fhem root 7129 Jan 15 20:48 Heizung_UG_Buero-2015.log
-rw-r--r-- 1 fhem root 5772 Jan 15 20:48 Heizung_UG_Gast-2015.log
Beim rename hat das Logfile die richtigen Rechte behalten.
Mit welchen Rechten läuft denn fhem bei Dir?
ps aux | grep fhem
Die Inkonsistenz rührt daher, dass im .deb package das fhem-Verzeichnis nach der Installation auf fhem:dialout gesetzt wird, der im gleichen Skript angelegte fhem-User aber mit fhem:dialout generiert wird. Deshalb werden neu angelegte Dateien mit fhem:dialout angelegt.
Was ich aber nicht verstehe:
Solange fhem unter dem User fhem läuft, sollte das überhaupt keine Rolle spielen, da der Eigentümer ja in beiden Fällen "fhem" ist.
Im Installationsskript habe ich eben die Änderung eingebaut, dass nach der Installation wieder auf fhem:dialout geschrieben wird.
Wenn der User mit Gruppe dialout läuft, dann sollte ein chown doch keine Änderung im Verhalten bringen?
Gib uns doch bitte mal die Ausgaben von:
ps aux | grep fhem
grep fhem /etc/passwd
grep fhem /etc/group
# ps aux | grep fhem
fhem 26506 0.0 3.9 114452 40284 pts/1 S 09:32 0:18 perl fhem.pl fhem.cfg
# grep fhem /etc/passwd
fhem:x:999:20::/opt/fhem:/bin/false
In /etc/group taucht fhem nicht auf, deswegen zeigt der entsprechende grep nichts. Group 20 ist dialout.
# grep dialout /etc/group
dialout:x:20:
Interessant auch:
/opt/fhem/log# ls -l
[...]
-rw-r--r-- 1 root root 22708 Jan 18 16:40 eventTypes.txt
Die Datei gehört root:root und wird seit 2 Tagen nicht mehr geschrieben (vmtl. deswegen, aber ohne sichtbare Fehlermeldung im Log). Alles andere gehört fhem:root. chown habe ich nur im log-Verzeichnis gemacht.
Und genau dort dürfte der Fehler liegen. Du hast chown mit "-R" gemacht und damit den Zugriff fhem komplett gegeben. Die Änderung dialout zu root dürfte nicht der Grund für funktionieren sein.
Das war keine Antwort an mich, oder? Meine chowns waren immer nur im log-Verzeichnis und nicht mit -R.
..... nur wundere ich mich gerade, warum auf Deinem System die von fhem geschriebene Log-Datei mit root-Rechten angelegt wird ....
Da das System ansonsten gut aussieht, kann ich Dir nicht weiterhelfen. Sorry
Oki, danke. Ich werde demnächst ein paar neue Geräte mit aufnehmen und dann mal schauen, was passiert.
Also, beim Anlernen neuer Geräte werden Logfiles nach dem Umbenennen der Geräte nicht mehr beschrieben, bis fhem neu gestartet wird. Mit den Dateirechten hat das offenbar gar nichts zu tun... Jedenfalls nicht offensichtlich. ???
Dafür habe ich gerade was anderes Interessantes gefunden:
2015-02-03 17:49:43 Global global open ./www/images/default/remotecontrol/black_btn_SHUFFLE.png failed: Keine Berechtigung, trying to restore the previous version and aborting the update
"Keine Berechtigung" klingt nach einem Rechte-Problem bei irgendeinem shell Aufruf. Als ich das erste Mal nachsah, existierte die Datei nicht. Da habe ich sie angelegt und ihr den owner fhem:root verpasst, den hier alle anderen Dateien nach der Installation ebenfalls hatten. Das ändert aber nichts, der Fehler bleibt...
Die von mir neu angelegte Datei mit fhem:root kann ich als User fhem wieder löschen und dann auch als user fhem wieder neu anlegen...
Kann es sein, dass irgendwas mit anderen Berechtigungen als denen von fhem ausgeführt wird? Ich versteh's nicht.