Problem mit fhem Debian-Paket: init.d Script blockiert andere Start-Scripts

Begonnen von PacmanII, 18 November 2013, 14:36:15

Vorheriges Thema - Nächstes Thema

PacmanII

Hallo,

ich schätze mal, dass dies kein Raspi spezifisches Problem ist, allerdings packe ich es mal trotzdem in dieses Forum. Ich habe fhem 5.5 mit dem offiziellen Debian Paket auf meinem Raspberry Pi (Raspbian) installiert. fhem funktioniert auch und ist nach dem Start erreichbar, allerdings funktioniert z.B. das Start-Script rc.local nun nicht mehr. Ich habe auf dem Pi noch andere Sachen laufen, die ich über diesen Weg starte und bisher auch einwandfrei funktionierten. Seit der Installation von fhem wird rc.local nun nicht mehr ausgeführt.

Ich bin kein Linux-Spezialist, meine aber herausgefunden zu haben, dass das init.d Script von fhem (/etc/init.d/fhem) fehlerhaft ist, da es nach dem Start von FHEM nicht zurückkehrt (kein EXIT) und das Shell-Script so ewig weiterläuft:


#!/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

case "$1" in
'start')
        echo "Starting fhem..."
        perl fhem.pl fhem.cfg
        RETVAL=$?
        ;;
'stop')
        echo "Stopping fhem..."
        perl fhem.pl $port "shutdown"
        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


Wenn ich nun nach erfolgreichem Start auf der Weboberfläche von fhem "shutdown restart" eingebe löst sich durch den Neustart diese Blockade auf, das Script macht einen EXIT und meine Tools in rc.custom werden endlich gestartet. Nach meinem Verständnis sollte ein init.d Script doch sofort zurückkehren und nicht so lange laufen wie der gestartete Deamon, oder?

Kann sich das ein Linux-Guru 8) bitte mal ansehen?

betateilchen

Zitat von: PacmanII am 18 November 2013, 14:36:15dass das init.d Script von fhem (/etc/init.d/fhem) fehlerhaft ist, da es nach dem Start von FHEM nicht zurückkehrt (kein EXIT)

Schau doch mal, was in der letzten Zeile des Skripts steht... da hast Du doch Dein exit. An dem Startskript kann ich kein Problem erkennen.

Was passiert denn, wenn Du das Skript manuell von der Kommandozeile aufrufst?

/etc/init.d/fhem start
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

PacmanII

Zitat von: betateilchen am 20 November 2013, 12:10:44
Was passiert denn, wenn Du das Skript manuell von der Kommandozeile aufrufst?

Das gleiche wie wenn es über den init-Prozess gestartet wird, es bleibt bei
perl fhem.pl fhem.cfg
hängen. Exit wird ja erst am Ende des Scripts erreicht und da kommt es eben nie hin, es sei denn ich beende fhem. Das Problem ist, dass fhem im Vordergrund gestartet und so das Skript nie zu ende abgearbeitet wird, so lange fhem läuft! Ich habe bei mir nun ein "&" hinten an gehängt, damit der Prozess im Hintergrund gestartet wird:
perl fhem.pl fhem.cfg &
Damit starten nun auch meine anderen Init-Prozesse wieder. Ich denke mal das ist ein Bug im offiziellen Debian-Paket, oder? Bevor ich mich bei einem Entwickler unbeliebt mache, wollte ich das hier nur nochmal verifizieren. :D

betateilchen

Zitat von: PacmanII am 20 November 2013, 14:27:37und da kommt es eben nie hin, es sei denn ich beende fhem. Das Problem ist, dass fhem im Vordergrund gestartet und so das Skript nie zu ende abgearbeitet wird, so lange fhem läuft!

Das stimmt nicht.

(http://up.picr.de/16525674cm.png)

fhem wird immer in den Hintergrund geschickt, auch ohne & am Ende.

Kann Dein Problem eventuell in der fhem.cfg liegen? Dass dort irgendein define rumgeistert, das extrem lange braucht, bis es ausgeführt ist?

Teste doch mal mit einer "jungfräulichen" fhem.cfg.


attr global autoload_undefined_devices 1
attr global logfile ./log/fhem-%Y-%m.log
attr global modpath .
attr global motd none
attr global statefile ./log/fhem.save
attr global updateInBackground 1
attr global userattr devStateIcon devStateStyle icon sortby webCmd
attr global verbose 3

define telnetPort telnet 7072 global

define WEB FHEMWEB 8083 global
attr WEB stylesheetPrefix dark



# Fake FileLog entry, to access the fhem log from FHEMWEB
define Logfile FileLog ./log/fhem-%Y-%m.log fakelog


Alternativ könnte sogar der Raspi selbst das Problem sein (z.B. wegen fehlender Uhrzeit zum Zeitpunkt des Starts o.ä.)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

PacmanII

Das war der entscheidende Hinweis. An die Config habe ich gar nicht gedacht. Ich habe meine ersten Gehversuche mit fhem unter Windows unternommen und nachdem alles fertig eingerichtet war die Konfiguration auf den Pi umgezogen.

Und zum Windows-Paket gehört folgende kleine aber feine Zeile in der config zum Standard-Lieferumfang:
attr global nofork 1

*Patsch* Damit ist es mir wie Schuppen von den Augen gefallen. Ich nehme alles zurück und behaupte das Gegenteil.

Muss mir jetzt mal alle Config-Einträge anschauen, ob evtl. noch mehr unerwünschten Windows-Spezifische Reste dabei sind...

Vielen Dank für deine Hilfe!

betateilchen

fhem unter Windows kommt auf meiner persönlichen No-Go-Liste direkt nach fhem auf Fritzbox  8)

aber gut, dass Du Dein Problem lösen konntest.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

P.A.Trick

Ich greife den Thread noch einmal auf. Gestern ist mein NAS stehen geblieben. Kein Login via SSH mehr möglich...komischerweise liefen andere Services wie Samba etc
u.a. auf fhem. Nachdem ich die root-Platte an meinen Hauptrechner gehangen habe bin ich nach einigem Suchen auf das Problem gestossen.

Wenn das Attribut "attr global nofork 1" in fhem gesetzt wird, blockiert das init-Skript den Start von Diensten (u.a. ssh) auf einem Debian System.
Das darf so nicht sein! Ich schaue mir das init.d Skript mal genauer an, aber wie gesagt, das ist ein NoGo!

LG
Patrick
Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn

betateilchen

nofork = 1 setzt man doch nur auf Windows-Systemen und da gibt es keine Startskripts in /etc/init.d
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

P.A.Trick

Ok aber dann bleibt das. Startseite trotzdem hängen!
selbst wenn es nur eine fehlerhafte Konfiguration ist, dürfen nicht andere System Dienste davon betroffen sein (besonders nicht ssh!)
Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn