Hauptmenü

Fhem doppelt gestartet?

Begonnen von FunkOdyssey, 05 August 2016, 17:50:46

Vorheriges Thema - Nächstes Thema

FunkOdyssey

Mal ne doofe Frage.

Ich hatte gerade das Problem, dass sich FHEM komplett weggehangen hat. Und im Log sah ich nur folgendes:

2016.08.05 17:08:23 1: Accept failed (telnetForBlockingFn_1470298793.96777: Too many open files)

Das ist aber nicht Thema in diesem Thread.

Bei der Suche nach der Ursache bin ich bei einem "ps aux | grep fhem" auf folgendes gestoßen:

fhem      2378 11.3  7.3  72344 69440 ?        S    17:33   0:55 perl fhem.pl configDB
root      2379  0.0  0.1   1788  1188 ?        Ss   17:33   0:00 startpar -f -- fhem
fhem      3035  1.5  3.9  67588 37892 ?        Sl   17:34   0:06 /usr/bin/perl ./FHEM/00_SONOS.pm 4711 1 0
fhem      3043  0.0  6.1  65224 58096 ?        S    17:34   0:00 perl fhem.pl configDB
root      3124  0.0  0.1   3768  1812 pts/0    S+   17:41   0:00 grep fhem


Das ist doch nicht richtig, oder? FHEM ist mehrfach gestartet?
Oder hat das etwas mit den verschiedenen Ports zu tun, dass FHEMWEB z.B. mit und ohne SSL auf verschiedenen Ports horcht?

In /etc/init.d/fhem wird FHEM definitiv nur einmal gestartet. Und ich hatte meinen RasPi auch bereits neu gestartet.

justme1968

das ist richtig. FHEM startet für manche dinge hintergrundprozesse. bei dir z.b. das sonos modul.

FHEM selber hat schon einen mechanismus eingebaut das ein echter mehrfach start normalerweise nicht möglich ist.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Morgennebel

Was sind die Ausgaben von


# ulimit -Hn
# ulimit -Sn


als User fhem?

Ciao, -MN
Einziger Spender an FHEM e.V. mit Dauerauftrag seit >= 24 Monaten

FHEM: MacMini/ESXi, 2-3 FHEM Instanzen produktiv
In-Use: STELLMOTOR, VALVES, PWM-PWMR, Xiaomi, Allergy, Proplanta, UWZ, MQTT,  Homematic, Luftsensor.info, ESP8266, ESERA

FunkOdyssey


budda85

Ich würde das Thema gerne nochmal hoch holen.
Ich habe FHEM bei mir in einem Docker am laufen und der Docker läuft auf einem Synology NAS.

Nun steht bei mir im Log folgendes
2017.10.18 13:54:14 1: Including fhem.cfg
2017.10.18 13:54:14 1: telnetPort: Can't open server port at 7072: Address already in use. Exiting.
2017.10.18 13:54:17 1: Including fhem.cfg
2017.10.18 13:54:17 1: telnetPort: Can't open server port at 7072: Address already in use. Exiting.
2017.10.18 13:54:20 1: Including fhem.cfg
2017.10.18 13:54:20 1: telnetPort: Can't open server port at 7072: Address already in use. Exiting.
2017.10.18 13:54:23 1: Including fhem.cfg
2017.10.18 13:54:24 1: telnetPort: Can't open server port at 7072: Address already in use. Exiting.
2017.10.18 13:54:27 1: Including fhem.cfg
2017.10.18 13:54:27 1: telnetPort: Can't open server port at 7072: Address already in use. Exiting.
2017.10.18 13:54:30 1: Including fhem.cfg
2017.10.18 13:54:30 1: telnetPort: Can't open server port at 7072: Address already in use. Exiting.
2017.10.18 13:54:33 1: Including fhem.cfg
2017.10.18 13:54:33 1: telnetPort: Can't open server port at 7072: Address already in use. Exiting.
2017.10.18 13:54:37 1: Including fhem.cfg
2017.10.18 13:54:37 1: telnetPort: Can't open server port at 7072: Address already in use. Exiting.


In dem Docker Protokoll von FHEM kommt folgendes:
2017-10-18 19:25:03,929 INFO success: fhem entered RUNNING state, process has stayed up for > than 2 seconds (startsecs)
2017-10-18 19:25:04,226 INFO exited: fhem (exit status 232; not expected)
2017-10-18 19:25:05,229 INFO spawned: 'fhem' with pid 284
2017-10-18 19:25:07,232 INFO success: fhem entered RUNNING state, process has stayed up for > than 2 seconds (startsecs)
2017-10-18 19:25:07,529 INFO exited: fhem (exit status 232; not expected)
2017-10-18 19:25:08,533 INFO spawned: 'fhem' with pid 288
2017-10-18 19:25:10,536 INFO success: fhem entered RUNNING state, process has stayed up for > than 2 seconds (startsecs)
2017-10-18 19:25:10,818 INFO exited: fhem (exit status 232; not expected)
2017-10-18 19:25:11,821 INFO spawned: 'fhem' with pid 292
2017-10-18 19:25:13,825 INFO success: fhem entered RUNNING state, process has stayed up for > than 2 seconds (startsecs)
2017-10-18 19:25:14,109 INFO exited: fhem (exit status 232; not expected)


Hier sieht man zwei Instanzen laufen (12492 und 23574)
root@FHEM:~# ps aux | grep fhem                                                               
root     12491  0.0  0.0  20036  1540 ?        S    19:21   0:00 bash /root/runfhem.sh       
root     12492  0.0  0.0  37304  7568 ?        R    19:21   0:00 perl fhem.pl fhem.cfg       
root     12494  0.0  0.0  11112   712 ?        S+   19:21   0:00 grep fhem                   
fhem     23574  0.4  0.5 248984 43684 ?        S    07:39   2:58 perl fhem.pl fhem.cfg       

Ist das normal? ich finde das sieht so aus, als ob eine zweite FHEM Instanz gestartet wird und dann wieder beendet wird.

CoolTux

Hat doch der Andre schon erklärt. Einige Module starten einen Fork des FHEM Hauptprozesses. Daher 2 oder 3 Instanzen für einen Moment.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

budda85

Dann anders gefragt:
Wie kommt es das ich alle 3-4 Sekunden eine Meldung habe, dass der Telnet Port bereits genutzt wird und auch gleichzeitig alle 3-4 Sekunden eine neue Fhem Instanz gestartet wird?

Auf einem anderen FHEM System habe ich noch nie gesehen das das
perl fhem.pl fhem.cfg
doppelt vorhanden ist

viegener

ich denke, dass es da schon ein Problem gibt - 2 fhem-Prozesse und einer davon root deutet für mich darauf hin, dass fhem läuft un dazu versucht wird fhem nochmal parallel zu starten - das würde auch zur Meldung passen

Ohne Angaben wie / was gestartet wird kann ich da aber auch nicht weiterhelfen

Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

budda85

Gestartet wird anscheinend hier mit:
root@FHEM:~# cat /proc/1/comm                                                                 
run.sh 


run.sh
#!/bin/bash                                                                                   
# Run command for docker service fhem and sshd                                               
                                                                                             
# check if ssh-keys exists                                                                   
test -x /etc/ssh/ssh_host_dsa_key || dpkg-reconfigure openssh-server                         
                                                                                             
# sshd                                                                                       
    # Create the PrivSep empty dir if necessary                                               
    if [ ! -d /var/run/sshd ]; then                                                           
        mkdir /var/run/sshd                                                                   
        chmod 0755 /var/run/sshd                                                             
    fi                                                                                       
                                                                                             
                                                                                             
# /etc/init.d/ssh start                                                                       
# ssh start with supervisord                                                                 
                                                                                             
echo "Current directory : $(pwd)"                                                             
echo "Environment RUNVAR: $RUNVAR"                                                           
echo "There are $# arguments: $@"                                                             
                                                                                             
# make pidfile rundir for fhem (because /var/run  ist tmpfs in ram)                           
if [ ! -d /var/run/fhem  ]; then                                                             
    mkdir /var/run/fhem                                                                       
    chown -R fhem:root /var/run/fhem                                                         
fi                                                                                           
                                                                                             
if [ -z "$1" ]; then                                                                         
    echo "No argument supplied. Start supervisord and services."                             
    /_cfg/volumedata2.sh write /opt/fhem                                                     
    /_cfg/volumedata2.sh write /opt/yowsup-config                                             
        chown fhem /opt/fhem                                                                 
        chown fhem /opt/yowsup-config                                                         
                                                                                             
        /etc/init.d/dbus start                                                               
                                                                                             
    # nfsclient / rpcbind                                                                     
    mkdir /run/sendsigs.omit.d                                                               
    service rpcbind start                                                                     
                                                                                             
    # autofs                                                                                 
    service autofs start                                                                     
                                                                                             
    service avahi-daemon  start                                                               
    service cron start                                                                       
                                                                                             
        # fhem start with supervisord                                                         
    /usr/bin/supervisord                                                                     
  else                                                                                       
    echo "Execute: $1 "                                                                       
    $1                                                                                       
fi                                                                           


Dann habe ich noch ein runfhem.sh
#! /usr/bin/env bash                                                                         
# Runs FHEM in foregroud for supervisord                                                     
                                                                                             
set -eu                                                                                       
                                                                                             
                                                                                             
pidfile="/var/run/fhem/fhem.pid"                                                             
cd /opt/fhem                                                                                 
# command=/usr/sbin/your-daemon                                                               
command=perl                                                                                 
                                                                                             
# Proxy signals                                                                               
function kill_app(){                                                                         
    kill $(cat $pidfile)                                                                     
    exit 0 # exit okay                                                                       
}                                                                                             
trap "kill_app" SIGINT SIGTERM                                                               
                                                                                             
# Launch daemon                                                                               
$command fhem.pl fhem.cfg                                                                     
sleep 2

# Loop while the pidfile and the process exist                                               
while [ -f $pidfile ] && kill -0 $(cat $pidfile) ; do                                         
    sleep 0.5                                                                                 
done                                                                                         
exit 1000 # exit unexpected


wo kann ich noch gucken?


Ich sehe gerade das pipp37, der das Docker Image erstellt hat, auch hier im Forum ist. Aber vielleicht kann mir hier auch einer helfen  :) :)
https://forum.fhem.de/index.php/topic,51190.0.html


viegener

Das was mir auffällt ist, in runfhem.sh wird auf einen pidfile überprüft, ich verstehe nicht, wie der erstellt werden sollte?
Wo kommt denn das Skript her und hast Du Änderungen gemacht?
Wenn ja weisst Du was Du dabei gerade machst?
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

budda85

Das war alles so bei dem Docker dabei.
Ich hab alles so gelassen wie es war. Ich arbeite eigentlich nur im FHEM selbst.
Das läuft soweit ja auch.

In dem ersten Post steht das FHEM mit PID gestartet wird
https://forum.fhem.de/index.php/topic,51190.0.html

Ich habe jetzt mal in dem anderen Thread noch nachgefragt bzw. auf diesen Thread hier verlinkt.
Eventuell teste ich mal ein anderes Docker Image.