Ankündigung

Einklappen
Keine Ankündigung bisher.

Beenden / Neu Starten schlägt teilweise fehl

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Beenden / Neu Starten schlägt teilweise fehl

    Hallo,

    ich habe es relativ oft (ca 30% aller Fälle) dass sich SmarthomeNG nicht beenden bzw neustarten lässt.
    Egal ob ich mit kill oder smarthome.py -s arbeite, bei Stopping Plugins bleibt es oft stehen. Teilweise beendet es sich dann noch nach 30 Sekunden. Teilweise muss kill -9 herhalten.
    Woran liegt das? Kann ich feststellen welches Plugin sich hier nicht beenden lassen will?
    Ich habe folgende im Einsatz
    • Alexa4p3
    • Artnet
    • BackendServer
    • cli
    • database
    • enigma2
    • ical
    • knx
    • mqtt
    • network
    • onewire
    • telegram
    • visu_websocket

    SmarthomeNG und Plugins sind auf dem Stand des aktuellen Master Branches.

    LG

    mode


    #2
    Ich tippe auf das telegram Plugin.Das kann bis zu zwei Minuten brauchen. Es gibt einen Parameter long_polling_timeout den Du mal setzen kannst. Ob das was hilft in Deinem Fall, weiß ich nicht. Es kann auch derzeit IMHO nicht anders gelöst werden.

    Kommentar


      #3
      Stimmt, sobald man Telegram rausnimmt ist das beenden kein Problem. Aus welchem Grund tritt dieses Problem auf?

      Kommentar


        #4
        Der Thread, der auf Telegram wartet bekommt das schlicht nicht mit. Das müsste innerhalb der externen Lib geändert werden und da haben wir keinen Zugang zu. Du kannst ja das Problem fixen und den Entwicklern einen PR geben, vielleicht bauen die das dann ein.

        Kommentar


          #5
          Du kannst ja das Problem fixen
          Wenn ich das könnte, würde ich es tun

          Kommentar


            #6
            Zitat von mode Beitrag anzeigen
            Wenn ich das könnte, würde ich es tun
            Ja, das kenne ich gut ...

            Kommentar


              #7
              Meinst du es macht Sinn hier ein Issue aufzumachen?
              https://github.com/python-telegram-b...ram-bot/issues
              Oder tritt dieser Fehler nur in Zusammenspiel mit SmarthomeNG auf?

              Kommentar


                #8
                Das Problem tritt „nur“ auf, weil SmartHomeNG sich ordnungsgemäß beenden möchte. Wenn andere Programme endlos laufen oder per kill beendet werden, haben sie das Problem nicht.
                Viele Grüße
                Martin

                Stay away from negative people. They have a problem for every solution.

                Kommentar


                  #9
                  kill -9 meinst du? Weil kill alleine in dem Fall auch nicht reicht.
                  Könnte man nicht als Workaround beim Beenden für smarthomeng die telegram threads hard (also kill -9 art) beenden?

                  Kommentar


                    #10
                    wie ich das sehe werden von telegram alle threads beendet:

                    Code:
                    019-11-30  09:56:58 DEBUG    telegram.ext.dispatcher Waiting for async thread 1/4 to end
                    2019-11-30  09:56:58 DEBUG    telegram.ext.dispatcher Closing run_async thread 1289ae16-9d82-40d2-af96-f5bc6b393546_0/4
                    2019-11-30  09:56:58 DEBUG    telegram.ext.dispatcher Closing run_async thread 1289ae16-9d82-40d2-af96-f5bc6b393546_1/4
                    2019-11-30  09:56:58 DEBUG    telegram.ext.dispatcher Closing run_async thread 1289ae16-9d82-40d2-af96-f5bc6b393546_2/4
                    2019-11-30  09:56:58 DEBUG    telegram.ext.dispatcher Closing run_async thread 1289ae16-9d82-40d2-af96-f5bc6b393546_3/4
                    2019-11-30  09:56:58 DEBUG    telegram.ext.dispatcher async thread 1/4 has ended
                    2019-11-30  09:56:58 DEBUG    telegram.ext.dispatcher Waiting for async thread 2/4 to end
                    2019-11-30  09:56:58 DEBUG    telegram.ext.dispatcher async thread 2/4 has ended
                    2019-11-30  09:56:58 DEBUG    telegram.ext.dispatcher Waiting for async thread 3/4 to end
                    2019-11-30  09:56:58 DEBUG    telegram.ext.dispatcher async thread 3/4 has ended
                    2019-11-30  09:56:58 DEBUG    telegram.ext.dispatcher Waiting for async thread 4/4 to end
                    2019-11-30  09:56:58 DEBUG    telegram.ext.dispatcher async thread 4/4 has ended
                    2019-11-30  09:56:58 DEBUG    telegram.ext.updater Waiting for Telegram Dispatcher thread to end
                    2019-11-30  09:56:58 DEBUG    telegram.ext.updater Telegram Dispatcher thread has ended
                    2019-11-30  09:56:58 DEBUG    telegram.ext.updater Waiting for Telegram Updater thread to end
                    
                    2019-11-30  09:56:59 DEBUG    telegram.ext.updater Timed out getting Updates: Timed out
                    2019-11-30  09:56:59 DEBUG    telegram.ext.updater updater - ended
                    2019-11-30  09:56:59 DEBUG    telegram.ext.updater Telegram Updater thread has ended
                    2019-11-30  09:56:59 DEBUG    plugins.telegram  telegram plugin stopped
                    
                    2019-11-30  09:57:06 WARNING  __main__          SmartHomeNG stopped
                    wenn ich das telegram-plugin raus nehme restartet SH über das admin interface bei mir auch nicht,..

                    über die Konsole jedoch kann ich sh neu starten. (mit und ohne telegram-plugin)
                    sudo systemctl restart smarthome.service

                    threads scheinen alle geschlossen zu sein:
                    Code:
                    top - 13:41:44 up  3:34,  1 user,  load average: 0,01, 0,11, 0,09
                    Threads:   0 total,   0 running,   0 sleeping,   0 stopped,   0 zombie
                    %Cpu(s):  0,0 us,  0,0 sy,  0,0 ni,100,0 id,  0,0 wa,  0,0 hi,  0,0 si,  0,0 st
                    KiB Mem :  4050964 total,  3391316 free,   220392 used,   439256 buff/cache
                    KiB Swap:  4192252 total,  4192252 free,        0 used.  3590080 avail Mem
                    
                      PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND


                    smarthome@debian64v10:~$ sudo systemctl status smarthome.service
                    ● smarthome.service - SmartHomeNG daemon
                    Loaded: loaded (/lib/systemd/system/smarthome.service; enabled; vendor preset: enabled)
                    Active: inactive (dead) since Sat 2019-11-30 13:49:09 CET; 17s ago
                    Process: 2426 ExecStart=/usr/bin/python3 /usr/local/smarthome/bin/smarthome.py (code=exited, status=0/SUCCESS)
                    Main PID: 2432 (code=exited, status=0/SUCCESS)

                    Nov 30 13:42:59 debian64v10 systemd[1]: Starting SmartHomeNG daemon...
                    Nov 30 13:42:59 debian64v10 python3[2426]: Daemon PID 2432
                    Nov 30 13:42:59 debian64v10 systemd[1]: smarthome.service: Supervising process 2432 which is not our child. We'll most likely not notice when it exits.
                    Nov 30 13:42:59 debian64v10 systemd[1]: Started SmartHomeNG daemon.

                    ​​​​​​​

                    Kommentar


                      #11
                      Das Admin Interface interessiert sich nicht für den Serivce. Es startet eine weitere Instanz von smarthome.py mit der Option -r.

                      Die neue Instanz führt durch die restart Option folgende Befehle aus, bevor sie sich zu starten versucht:
                      Code:
                      time.sleep(5)
                      lib.daemon.kill(PIDFILE, 30)
                      - 5 Sekunden warten
                      und danach
                      - Versuch den alten Prozess zu beenden (die Process ID wird dazu aus dem PIDFILE genommen
                      - 30 Sekunden warten, ob der alte shng Prozess sich ordnungsgemäß beendet
                      - nach 30 Sekunden versuchen den Prozess (falls er noch läuft) zu killen

                      Danach starten die neue Instanz normal.

                      Probleme können nur auftreten, falls die laufende Instanz sich nicht innerhalb von 30 Sekunden beendet.

                      Zum Testen könnt ihr die Wartezeit mal erhöhen:

                      In bin/smarthome.py ab Zeile 1220:
                      Code:
                          elif args.restart:
                              time.sleep(5)
                              lib.daemon.kill(PIDFILE, 30)
                              pass
                          elif args.debug:
                      im Aufruf von lib.daemon.kill mal den 2. Parameter auf eine Zeit größer 30 Sekunden setzen
                      Viele Grüße
                      Martin

                      Stay away from negative people. They have a problem for every solution.

                      Kommentar


                        #12
                        wenn ich SH über die Konsole starte
                        Code:
                         python3 /usr/local/smarthome/bin/smarthome.py
                        dann lässt sich SH über das admin-interface neu starten.

                        wenn SH als Dienst gestartet wird
                        Code:
                        sudo systemctl start smarthome.service
                        dann ist dies der letzte log-Eintrag:
                        Code:
                        2019-12-01  12:09:36 WARNING  __main__          SmartHomeNG stopped
                        Gruß Ivan

                        Kommentar


                          #13
                          Wie sieht deine Dienst Einstellung aus? Ich vermute du benutzt systemd?
                          Ich vermute, dass der eben die eine PID Überwacht - die dann eben beim Restart gekiillt wird, und dass er dann denkt der Prozess ist beendet und macht dann alles dicht?

                          Edit: hier mal meine, damit habe ich eben mal einen restart über das Admin Interface getestet und das hatte funktioniert:
                          Code:
                          cat /etc/systemd/system/smarthome.service
                          [Unit]
                          Description=SmartHomeNG daemon
                          After=network.target
                          After=knxd.service
                          After=owserver.service
                          
                          [Service]
                          Type=forking
                          ExecStart=/usr/bin/python3 /usr/local/smarthome-dev/bin/smarthome.py
                          User=smarthome
                          PIDFile=/usr/local/smarthome-dev/var/run/smarthome.pid
                          Restart=on-abort
                          
                          [Install]
                          WantedBy=multi-user.target
                          Wobei ich glaube, er hat den Dienst sogar auch als Neu gestartet betrachtet:

                          Code:
                          # systemctl status smarthome.service
                          ● smarthome.service - SmartHomeNG daemon
                             Loaded: loaded (/etc/systemd/system/smarthome.service; enabled; vendor preset: enabled)
                             Active: active (running) since Tue 2019-12-03 08:50:53 CET; 2min 12s ago
                            Process: 6779 ExecStart=/usr/bin/python3 /usr/local/smarthome-dev/bin/smarthome.py (code=exited, status=0/SUCCESS)
                           Main PID: 6804 (python3)
                              Tasks: 30 (limit: 4226)
                             CGroup: /system.slice/smarthome.service
                                     └─6804 /usr/bin/python3 /usr/local/smarthome-dev/bin/smarthome.py
                          
                          Dez 03 08:50:51 zentrale systemd[1]: Starting SmartHomeNG daemon...
                          Dez 03 08:50:53 zentrale python3[6779]: Daemon PID 6804
                          Dez 03 08:50:53 zentrale systemd[1]: Started SmartHomeNG daemon.
                          Zuletzt geändert von TCr82; 03.12.2019, 08:54.

                          Kommentar


                            #14
                            Code:
                            sudo nano /lib/systemd/system/smarthome.service
                            
                            [Unit]
                            Description=SmartHomeNG daemon
                            After=network.target
                            After=knxd.service
                            After=knxd.socket
                            
                            [Service]
                            Type=forking
                            ExecStart=/usr/bin/python3 /usr/local/smarthome/bin/smarthome.py
                            User=smarthome
                            PIDFile=/usr/local/smarthome/var/run/smarthome.pid
                            Restart=on-abort
                            
                            [Install]
                            WantedBy=default.target

                            Code:
                            sudo systemctl status smarthome.service
                            ● smarthome.service - SmartHomeNG daemon
                               Loaded: loaded (/lib/systemd/system/smarthome.service; enabled; vendor preset: enabled)
                               Active: active (running) since Tue 2019-12-03 22:09:50 CET; 3min 56s ago
                              Process: 389 ExecStart=/usr/bin/python3 /usr/local/smarthome/bin/smarthome.py (code=exited, status=0/SUCCESS)
                             Main PID: 635 (python3)
                                Tasks: 50 (limit: 4915)
                               CGroup: /system.slice/smarthome.service
                                       ├─635 /usr/bin/python3 /usr/local/smarthome/bin/smarthome.py
                                       ├─801 /bin/sh -c /usr/bin/python3 /usr/local/smarthome/bin/smarthome.py -r
                                       └─802 /usr/bin/python3 /usr/local/smarthome/bin/smarthome.py -r
                            
                            Dez 03 22:09:58 debian64v10 systemd[1]: Starting SmartHomeNG daemon...
                            Dez 03 22:09:50 debian64v10 python3[389]: Daemon PID 635
                            Dez 03 22:09:50 debian64v10 systemd[1]: smarthome.service: Supervising process 635 which is not our child. We'll most likely not notice when it exits.
                            Dez 03 22:09:50 debian64v10 systemd[1]: Started SmartHomeNG daemon.
                            
                            
                            
                            
                            sudo systemctl status smarthome.service
                            ● smarthome.service - SmartHomeNG daemon
                               Loaded: loaded (/lib/systemd/system/smarthome.service; enabled; vendor preset: enabled)
                               Active: inactive (dead) since Tue 2019-12-03 22:14:02 CET; 11s ago
                              Process: 389 ExecStart=/usr/bin/python3 /usr/local/smarthome/bin/smarthome.py (code=exited, status=0/SUCCESS)
                             Main PID: 635 (code=exited, status=0/SUCCESS)
                            
                            Dez 03 22:09:58 debian64v10 systemd[1]: Starting SmartHomeNG daemon...
                            Dez 03 22:09:50 debian64v10 python3[389]: Daemon PID 635
                            Dez 03 22:09:50 debian64v10 systemd[1]: smarthome.service: Supervising process 635 which is not our child. We'll most likely not notice when it exits.
                            Dez 03 22:09:50 debian64v10 systemd[1]: Started SmartHomeNG daemon.
                            Zuletzt geändert von ivande; 03.12.2019, 22:18.

                            Kommentar

                            Lädt...
                            X