Stop Working after couple of Hours
Leilei0106 opened this issue · 6 comments
Hi is there any new relaise ? Because it run couple hour´s an than it stop. I run it around 4 month now . After a new start of the py it works again. On the Rasp4 i have only this Program running. Maybe you have a solution. THX Daniel
Hi,
I think we can write in German. If that's a problem just report it.
Hallo,
ja ich arbeite gerade an einer neuen Version um es stabiler zu bekommen. Aber es wird noch einige Tage dauern.
LG Michael
Hi Michael
Supa ja können wir gerne machen. Danke für deinen Support
Lg
Eine weitere Lösung wäre es auch einen System Service anzulegen, der einfach bei Abbruch des Python Prozesses, diesen neu startet. Hab ich bei mir so eingerichtet. ( Keine Probleme mehr mit Ausfall )
Wenn jemand daran interessiert ist, kann ich gerne die Konfiguration teilen, bzw. könnten wir die Files ins Repo hängen
@michaelhenningersrb könntest du vielleicht dein System service teilen ?
Danke Lg
@greenMikeEU Vielleicht könntest du/wir das in dieses Repo aufnehmen?
@Leilei0106 Bittesehr ;)
Um das python script als service auszuführen, folgendes File in /lib/systemd/system
anlegen:
Der Filename des scripts EVNSmartmeterMQT.py
muss ggf. an euren script-namen angepasst werden!!!!!
smartmeter.service
[Unit]
Description=EVN Smartmeter Service
After=multi-user.target
[Service]
Type=simple
ExecStart=/usr/bin/python3 /home/smartmeter/EVNSmartmeterMQT.py
Restart=on-abort
[Install]
WantedBy=multi-user.target
-
Python file ausführbar setzen
sudo chmod +x /home/smartmeter/EVNSmartmeterMQT.py
-
Service Daemon neu laden
sudo systemctl daemon-reload
-
Service aktivieren
sudo systemctl enable smartmeter.service
-
Service status prüfen
sudo systemctl status smartmeter.service
-
Service neu starten
sudo systemctl restart smartmeter.service
Der service sollte das python script bei dumps neu laden. Jedoch habe ich festgestellt, dass es bei manchen Fehlern nicht zu dumps fürt, zum Beispiel wenn die Verbindung abbricht ( MQTT/Serial ).
Dafür habe ich auch einen hotfix. Dies könnte man natürlich viel schöner abwickeln.
Für den hotfix habe ich einfach einen cron job angelegt, der den Service einmal täglich um 5 Uhr neu startet
-
crontab config anpassen
0 5 * * * sudo systemctl restart smartmeter.service
Restart geht theoretisch auch ohne crontab oder systemd.timer:
Restart=always
RuntimeMaxSec=12h
Noch schöner ist es mit einem Watchdog (siehe https://github.com/bb4242/sdnotify).
Damit erspart man sich so ziemlich jede Fehlerbehandlung wegen verschwundener serieller Schnittstellen, Netzwerk interfaces, MQTT Broker, etc.
[Unit]
Description=EVN Smartmeter Service
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
Environment=PYTHONUNBUFFERED=true
ExecStart=/usr/bin/python3 /home/smartmeter/EVNSmartmeterMQT.py
Restart=always
# oder was auch immer da gut funktioniert
WatchdogSec=60
# praktisch, um zu schnelle Restarts zu verhindern, wenn irgendwas nicht läuft
RestartSec=20
[Install]
WantedBy=multi-user.target
import sdnotify
…
n = sdnotify.SystemdNotifier()
…
n.notify("READY=1")
…
n.notify("WATCHDOG=1")