Zum Hauptinhalt springen

Neustart

Es gibt drei Arten des Neustarts — zuerst klären, welche gemeint ist​

Es gibt zwei Stellen mit dem gleichen Namen restart.sh, und eine dritte, die nur die App neu startet. Die Aussage «nur Tomcat für 6 Sekunden» trifft auf keine davon zu.

WasWoZielDauer
Host-Neustartplantpulse-edge-docker/bin/restart.shGesamter Container — Neustart nach Bereinigung von RückständenMinuten
Stack-Neustart$PE_HOME/bin/restart.shAlle Module des Gateways — stop.sh + start.sh als ein Prozess~150–210 Sekunden
Nur App-Neustart$PE_HOME/bin/restart-app.shNur Tomcat (App). Cassandra · HiveMQ · Node-RED bleiben unverändert30–90 Sekunden

Die meisten Konfigurationsänderungen werden mit nur App-Neustart abgedeckt. Nur wenn auch Datenbank · MQTT · Node-RED neu gestartet werden müssen (z. B. mqtt.enable-Umschaltung), ist ein Stack-Neustart erforderlich.

Nur App-Neustart (restart-app.sh)​

Der Button App neu starten auf dem Bildschirm und POST /api/v1/system/restart rufen dies nach 3 Sekunden auf. Sie können es auch direkt ausführen.

$PE_HOME/bin/restart-app.sh
# 30~90초 후
curl -s http://127.0.0.1/api/v1/edge | jq
Wenn die unten liegenden Komponenten ausgefallen sind, wird ein reiner App-Neustart sie nicht wiederbeleben

Das Skript prüft zuerst Cassandra (9042) · Redis (6379) · MQTT (1883); falls diese ausgefallen sind, wird eine Warnung ausgegeben. Denn selbst wenn nur die App neu gestartet wird, schlägt das Bootstrap ohnehin fehl (bekannte Einschränkung).

Lesen Sie diese Warnung zuerst, um keine Zeit mit «Neustart hilft nicht» zu verschwenden — in solchen Fällen müssen Sie einen Stack-Neustart durchführen oder die betroffene Komponente zuerst wiederbeleben.

Warum ein reiner App-Neustart den Container im Container-Modus nicht herunterfährt

Der PID-1-Wächter des Containers fährt den gesamten Container herunter, wenn der Tomcat-Prozess verschwindet. Bei einem reinen App-Neustart ist Tomcat für 30–90 Sekunden weg, was diesen Wächter auslöst.

Deshalb erstellt restart-app.sh beim Start eine server/logs/.restart-in-progress-Markierung, um «beabsichtigter Neustart, bitte warten» zu signalisieren, und löscht sie am Ende. Dieses Skript läuft außerhalb des Tomcat-Prozessbaums (setsid), sodass es Tomcat beenden kann und selbst am Leben bleibt, um die Markierung zu entfernen.

Stack-Neustart ($PE_HOME/bin/restart.sh)​

stop.sh und start.sh werden innerhalb eines einzigen Prozesses nacheinander ausgeführt.

Warum «ein Prozess» — Vorfall vom 2026-07-02

Bei Ausführung über ssh "stop.sh; start.sh" kann ein Abbruch der SSH-Sitzung zu einem von zwei Problemen führen — der Vorgang bleibt hängen (Start erfolgt nicht), oder die spät fertig werdende Seite stoppt einen bereits wieder gestarteten Stack erneut.

Deshalb führt dieses Skript unabhängig vom Ergebnis des Stopps immer den Start aus (denn ein heruntergefahrener Zustand ist das Schlimmste) und schreibt das Ergebnis in eine Markierungsdatei, damit der Aufrufer den Abschluss überprüfen kann.

Aus der Ferne wird es so aufgerufen:

ssh 박스 "RESTART_RUN_ID=xyz nohup setsid $PE_HOME/bin/restart.sh >/dev/null 2>&1 </dev/null &"
# 그다음 /tmp/pp-restart-xyz.done 을 폴링한다 (내용이 start.sh 의 종료 코드)

Beim Start werden die Module nacheinander hochgefahren, wobei pro Modul eine maximale Wartezeit von 300 Sekunden gilt (um zu verhindern, dass ein Modul endlos wartet und den gesamten Bootvorgang blockiert). Am Ende wird bis zu 180 Sekunden lang geprüft, ob alles läuft.


Host-Neustart (plantpulse-edge-docker/bin/restart.sh)​

Startet das Gateway sicher neu. Der Unterschied zu systemctl restart besteht darin, dass zuerst verbleibende Rückstände bereinigt werden.

sudo /opt/kopens/plantpulse-edge-docker/bin/restart.sh
Wenn nur systemctl restart ausgeführt wird, kann es aufgrund von Namenskonflikten fehlschlagen

Wenn alte Container weiterhin den Namen halten oder Zombie-Prozesse vorhanden sind, kann der neue Container nicht mit name already in use starten. restart.sh bereinigt diese Rückstände zuerst und fährt dann den Dienst hoch.

Wann ist ein Neustart erforderlich?​

SituationIst ein Neustart die Antwort?
Konfiguration (app.properties · Umgebungsvariablen) geändertJa — Die Konfiguration wird nur beim Start einmal gelesen
Treiberoptionen geändertNein — Verbindung stoppen und starten reicht
Erfassung scheint gestoppt zu seinZuerst Diagnose und Inspektion — ohne Ursachenkenntnis gehen beim Neustart Beweise verloren
Neues Image erhaltenKein Neustart, sondern Upgrade

Prüfung​

cd /opt/kopens/plantpulse-edge-docker/bin
./status.sh
./health.sh
./logs.sh -f # 부팅을 따라가며 본다

Weitere Informationen​