Hallo Leute,
ich hab mir mal gedacht, dass ich mein funktionierenden FHEM System auf dem Pi3 unter Debian Stretch so umbaue, dass die Logs und Backup Dateien nicht mehr auf der SD Karte gespeichert werden sondern direkt auf der NAS abgelegt werden.
Mit diesem Vorhaben fingen meine Probleme an.
Das System funktioniert eigentlich super, aber ich habe das Problem wenn ich den Pi neustarten muss bzw. ein Stromausfall war, der in letzter Zeit irgendwie häufig in meiner Region war, das das FHEM nicht mehr automatisch startet. Den Fehler hierfür vermute ich im Mounten der Netzwerkordner, denn ich kann FHEM per SSH über
sudo /etc/init.d/fhem start
starten. Somit glaube ich, dass der Start von FHEM früher passiert, als die gemounteten Netzlaufwerke zur Verfügung stehen.
Folgendes habe ich gemacht:
1) Alle Device Logs werden jetzt auf /opt/fhem_log geschrieben (entsprechende Nutzerrechte wurden gesetzt)
2) Alle Backups werden auf /opt/fhem_backup geschrieben geschrieben (entsprechende Nutzerrechte wurden gesetzt)
Bis dahin habe ich noch ohne Netzlaufwerke getestet und alles lief (auch der automatische FHEM Start nach dem neustarten des RPI)
3) Als nächstes lasse ich die Netzlaufwerke über /etc/fstab mounten:
//192.168.2.3/FHEM/backup /opt/fhem_backup cifs credentials=/opt/fhem/diskstation,uid=999,gid=20,forceuid,forcegid,auto,x-systemd.automount,_netdev 0 0
//192.168.2.3/FHEM/log /opt/fhem_log cifs credentials=/opt/fhem/diskstation,uid=999,gid=20,forceuid,forcegid,auto,x-systemd.automount,_netdev 0 0
Die Netzlaufwerke funktioneren und ich kann in /opt/fhem_log schreiben. Wenn ich FHEM über SSH starte, dann schreibt es auch fleißig die Logs auf die NAS.
Was habe ich falsch gemacht bzw. was muss ich noch machen, das FHEM erst gestartet wird nachdem die Netzlaufwerke gemountet wurden?
Mfg
Matthias
Hallo,
Du musst sicherstellen, dass FHEM nach dem Mounten der Dateisysteme gestartet wird, indem Du die Startreihenfolge entsprechend setzt. GGf. hilft Dir dieses Thema (https://forum.fhem.de/index.php?topic=12127.0) dabei.
Viele Grüße
Boris
Hi, danke für die Antwort.
Konnte leider erst jetzt Antworten.
Leider hilft mir deine Antwort nicht ganz weiter. Wenn ich das richtig verstanden habe, dann muss ich die Startskripte von Runlevel 2,3,4,5 sowie das in init.d so anpassen, das vor dem Aufruf
perl fhem.pl fhem.cfg
jeweils eine Prüfung auf die gemounteten Ordner/Laufwerke erfolgen muss. Nur wie prüfe ich das? Gibt es da nen Wait Befehl für? Wie ist das mit den Startskripten, werden die "parallel" ausgeführt oder kann ich das OS bei Fehlern zum Hängen / komplett abschießen bringen?
Wie sieht es eigentlich mit dem Wechsel zu systemd aus? Wäre das ne Möglichkeit? Gibt es da Abhängigkeiten die ich dafür nutzen kann?
Mfg
Matthias
Neee ... Du must in den Startscripten dafür sorgen, das diese erst NACH dem Netzwermount gestartet werden.
Jetzt ist die Fragten:
Was für ein Startsystem hast Du (init.d oder systemd) und wie mountest Du die Ordner?
Hi Wernieman,
siehe 1. Post.
Systemstart über init.d
Netzwerkmount über /etc/fstab
Soll ich auf systemd umstellen? Wie stell ich das denn genau ein, das Fhem erst nach dem Netzwerkmount über fstab ausgeführt wird? Ich seh nirgends wann genau fstab abgearbeitet wird.
Habe nur aktuell kein init.d-Screipt von fhem da ... könntest Du mir bitte Deines Posten?
#!/bin/sh
# description: Start or stop the fhem server
# Added by Alex Peuchert
### BEGIN INIT INFO
# Provides: fhem.pl
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: FHEM server
### END INIT INFO
set -e
cd /opt/fhem
port=7072
if test "$2" != "noaptmark"; then
apt-mark hold fhem > /dev/null
fi
case "$1" in
'start')
echo "Starting fhem..."
# if you need to start hmland for use with
# Homematic, please start the hmland daemon
# like this (please use correct path and port,
# depending on your installation!)
#
# /opt/hmcfgusb/hmland -d -p 1234 -r 0
#
perl fhem.pl fhem.cfg
# if you want to use configDB for configuration,
# use this command to start fhem:
#
# perl fhem.pl configDB
#
# and remove/comment the above line including fhem.cfg
RETVAL=$?
;;
'stop')
echo "Stopping fhem..."
# if you want to stop hmland during fhem stop:
# pkill hmland
pkill -U fhem perl
RETVAL=$?
;;
'status')
cnt=`ps -ef | grep "fhem.pl" | grep -v grep | wc -l`
if [ "$cnt" -eq "0" ] ; then
echo "fhem is not running"
else
echo "fhem is running"
fi
;;
*)
echo "Usage: $0 { start | stop | status }"
RETVAL=1
;;
esac
exit $RETVAL
# Required-Start: $local_fs $remote_fs
Solltest Du anpassen, kann auktuell nur nicht nacgucken.
Alternativ in /etc/rc.5 den Startlink anpassen
Entweder Du nutzt jetzt google, oder bekommst erst Montag Hilfe ...
Hab mal bei google gelesen, aber noch nicht live getestet da ich erst die Richtigkeit bestätigt wissen möchte bevor ich da rumschreibe. Will das System ja nicht gleich abschießen. ;)
Also die Datei /etc/init.d/fhem wie folgt ändern:
# Required-Start: $local_fs $remote_fs $network $time
Muss ich noch die Symlink in /etc/rcX.d mit folgenden Befehl anpassen oder macht das das System beim Reboot selber?
update-rc.d fhem defaults
Wäre das so richtig?
Ups ... ist schon etwas her, das ich das letzte mal ein init.d-System unter der Hand hatte...
Ich würde per update-rc.d den Deamon removen und wieder enablen.... das System an sich machst Du damit nicht kaputt.
Du solltest berücksichtigen, dass dein Netzwerk ausfällt, deine NAS kaputt geht oder sonst irgendwelche Umstände eintreten. Das sollte dann nicht zum Ausfall einer FHEM führen.
Ich hab mich mit dem Problem auch auseinandergesetzt und bin bei folgender Lösung gelandet: Log-Files auf FHEM-Server (Bei mir ein Odroid C1) belassen, aber regelmäßig archivieren. hab mir dazu ein Tool (siehe der Thread unter "Sonstiges") geschrieben, dass die Log-Files auf eine NAS archiviert. Mein Odroid ist mit einer "Powerbank" als USV erstmal halbwegs ausfallsicher.
Das Problem, dass die Schreibzugriffe die Lebensdauer deiner SD-Karte negativ beeinflussen, habe ich bei mir so gelöst, dass ich die commit-time hochgesetzt habe. Durch meine "Spar"-USV kann ich das machen.
cu markus
Um die Schreibzugriffe zu minimieren und die SD-Karte zu schonen kann ich das hier empfehlen:
https://github.com/azlux/log2ram
Habe das schon seid einigen Monaten auf meinen RPi laufen. Das erzeugt für /var/log eine Ramdisk und die Daten werden nur noch stündig (einstellbar) auf die SD Karte geschrieben.
Wobei man das nur machen soll, wenn man gegug RAM frei hat ..... und FHEm mit z.B. vielen presend per ping kann einiges an Speicher brauchen, was der PI wenig hat ...