#!/bin/bash # Startet die beiden Dauerprozesse des SolarManagers neu: # # solarManager.py Messwerte einsammeln, Wallbox und # Heizung regeln # autoActions/autoaction_runner.py die Automatiken aus dem Web-UI # auswerten und die Kommandos schicken # # Aufgerufen wird das Skript vom Aufgabenplaner beim Hochfahren (als root), # es laesst sich aber jederzeit auch von Hand starten: eine schon laufende # Instanz wird vorher beendet. Beim Runner ist das wichtig - zwei Instanzen # wuerden jedes Kommando doppelt schicken und sich ausserdem gegenseitig vom # MQTT-Broker werfen, weil beide dieselbe Client-Kennung benutzen. BASIS="/volume1/homes/wagner/SolarManager" PYTHON="/usr/bin/python3" cd "$BASIS" || { echo "$BASIS gibt es nicht"; exit 1; } # Sucht die laufenden Prozesse, auf deren Kommandozeile das Muster passt. suchen() { ps aux | grep -- "$1" | grep -v grep | awk '{print $2}' } # Beendet sie und wartet darauf: erst freundlich mit SIGTERM, nach fuenf # Sekunden mit Gewalt. Das Warten ist kein Luxus - startete die neue Instanz, # waehrend die alte noch am Broker haengt, wuerde sie sofort wieder getrennt. beenden() { pids=$(suchen "$1") [ -z "$pids" ] && return echo "Beende $1 (PID $pids)" kill $pids 2>/dev/null for versuch in 1 2 3 4 5; do sleep 1 pids=$(suchen "$1") [ -z "$pids" ] && return done echo " reagiert nicht, jetzt mit SIGKILL" kill -9 $pids 2>/dev/null sleep 1 } starte() { beenden "$1" echo "Starte $1, Ausgabe nach $2" "$PYTHON" "$1" &> "$2" & } starte "solarManager.py" "solarOutput.log" starte "autoActions/autoaction_runner.py" "autoActions.log"