Hallo zusammen,
ich hatte mal eine defekte SD-Karte zu beklagen. Daher dachte ich, die meisten Datenschreibereien kommen doch von den FHEM Logs. So hatte ich den Fhem-Ordner auf meinen NAS verschoben wo eh die MYlog-DB schon liegt und per SAMBA in Verzeichnisbaum vom Raspbian an den ursprünglich Ort geroutet. Funktioniert einwandfrei bis auf eins: FHEM startet nicht mehr automatisch beim Booten. Ich gehe fest davon, dass da die Netzwerkverbindung noch nicht steht, zumindest findet man entsprechende Einträge im Log vom Raspian. Das Skript zum Starten von FHEM gibt nach ein paar Versuchen/Sekunden auf. Das Starten von FHEM muss ich jetzt immer per Hand anstoßen, die Netzwerkverbindung geht von selber. Gibt es dafür eine Lösung? Ich denke man müsste einfach das FHEM Skript (/etc/init.d/fhem) umschreiben, so dass nach ein paar Minuten Verzögerung FHEM startet. Oder einfach es wartet wird bis die Verbindung steht.
Hat jemand ne Idee?
Grüße Martin
Hallo Martin,
also grundlegend halte ich das für keine gute Idee, den Start des einen Systems von so vielen anderen Komponenten abhängig zu machen (Netztwerk, NAS und ff)
Du kannst Abhängkeiten bei den Diensten im raspbian einbauen, Netzwerk samba oder wie auch immer. Allerdings werden die nach meiner Erfahrung nicht unbedingt greifen, weil der Start "asynchron" erfolgt und die Meldung Netzwerk gestartet nicht unbedingt bedeutet, dass es wirklich schon alles da ist. Aber da kannn ich nur Vermutungen äußern, da müsstest Du Dich mit init.d und systemd befassen.
Du kannst am Anfang des fhem start Scripts einfach ein sleep einfügen, wie sich das auf das System auswirkt wenn man dort minuten angibt weiß ich nicht. Beispiel für 10 sec:
sed -i s/' perl fhem.pl fhem.cfg/ sleep 10\n perl fhem.pl fhem.cfg/' /etc/init.d/fhem
Gruß Otto
Hi,
Und dann bitte den Inhalt von
/etc/init.d/fhem
anschauen/posten.
Insbesondere ist spannend was nach Required-Start steht (z.B. $network zum warten auf das Netzwerk)
Bei Änderungen noch
sudo systemctl enable fhem
ausführen.
Gruß Arnd
Raspi2 mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, Bravia, ...
Ok das schau ich mir an. Nachdem der Raspi sehr zügig bootet,nämlich unter einer Minute, denke ich ein sleep von 60s sollte reichen. Wo muss das eigentlich hin? Welche Datei?
Die Fhem Datei hat bei Required Start alles mit # auskommentiert. Oder muss das so?
GNU nano 2.2.6 Datei: fhem #!/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..."
Gruß Martin
Dieser Befehl macht das für Dich. Richtige Datei, richtige Stelle. Vorher bitte sudo su
sed -i s/' perl fhem.pl fhem.cfg/ sleep 60\n perl fhem.pl fhem.cfg/' /etc/init.d/fhem
Die Beschreibung von sed und die Erklärung vom Syntax solltest Du durch google finden. ;)
Du kannst auch die Abhängigkeit eintragen
# Den Systemstart von ntp abhängig machen
sed -i s/'# Required-Start: $local_fs $remote_fs/# Required-Start: $local_fs $remote_fs $ntp/' /etc/init.d/fhem
systemctl daemon-reload
Das # im init Script ist nicht auskommentiert, das ist so!
Aber wie gesagt, das wird für Deinen Fall nichts bringen. Selbst wenn das Netzwerk gestartet ist, ist dein Laufwerk noch nicht verbunden!
Gruß Otto
Du könntest im Start-Script einen test machen, ob Laufwerk/Mount existiert und entsprechend warten. Alternativ in die /etc/rc.local den Start von FHEM eintragen .. das ist dann definitiv die letzte startmöglichkeit und DANN sollte der mount gemountet sein.
P.S. Wann/Wie mountest Du das Samba-Share?
fstab oder eigenes Script?
Hallo
Zitat von: Wernieman am 23 Dezember 2017, 15:39:01
Du könntest im Start-Script einen test machen, ob Laufwerk/Mount existiert und entsprechend warten.
Wie müsste dieser Test denn aussehen?
Zitat von: Wernieman am 23 Dezember 2017, 15:39:01
P.S. Wann/Wie mountest Du das Samba-Share?
fstab oder eigenes Script?
Das geht per fstab. Das hat sich als praktikabel erwiesen und funktioniert zuverlässig.
Das mit dem sleep wäre auch noch eine Option, wenn das mit Test nicht klappt.
Schöne Weihnachten
Martin
Hi,
moin wo ich das hier lese, fällt mir ein, dass Du auch im init script das Fileshare mounten könntest :-)
Oder Du testest auf das Samba Mount.
Hier mal um Ideen zu generieren:
https://github.com/lavalamp-/smb-check/blob/master/smb_check.sh
Gruß Arnd
Raspi2 mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, Bravia, ...
Du könntest u.A.:
dir=<Zu Prüfenden Mountpoint>
until ls $dir >/dev/null 2>/dev/null
do
sleep 1
done
Allerdings wartet der Code ewig, da solltest Du noch eine Zusatzprüfung (z.B. Zähler) einrichten
Ich nutze einen Cronjob um zu starten.
@reboot /etc/init.d/fhem start
Wie mache das dann hier?
Grüße Martin
Ich habe es nun wie folgt gelöst
Ich habe meinem home ein Shellskript mit folgendem Inhalt angelegt
#!/bin/bash
sleep 10
sudo /etc/init.d/fhem start
Dann meinen cronjob so angepasst, dass er das Skript beim Booten ausführt.
Das wars.
Grüße Martin