From d3727ad2f7a24e16c03c3daa8b710678a358ae42 Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Mon, 1 Sep 2025 15:13:56 +0200 Subject: [PATCH] =?UTF-8?q?=C3=84ndere=20den=20Typ=20des=20Services=20in?= =?UTF-8?q?=20der=20Datei=20yourpart-daemon.service=20von=20'simple'=20auf?= =?UTF-8?q?=20'notify'=20und=20f=C3=BCge=20die=20Option=20NotifyAccess=20h?= =?UTF-8?q?inzu.=20Verbessere=20die=20Signalverarbeitung=20in=20main.cpp,?= =?UTF-8?q?=20um=20ein=20sauberes=20Herunterfahren=20der=20Anwendung=20zu?= =?UTF-8?q?=20erm=C3=B6glichen=20und=20die=20Hauptschleife=20anzupassen.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.cpp | 20 +++++++++++++++++--- yourpart-daemon.service | 3 ++- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index c69db9b..f2e5330 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -20,11 +20,14 @@ #include std::atomic keepRunning(true); +std::atomic shutdownRequested(false); void handleSignal(int signal) { + std::cerr << "Signal erhalten: " << signal << ". Beende Anwendung..." << std::endl; + if (signal == SIGINT || signal == SIGTERM) { - std::cerr << "Signal erhalten: " << signal << ". Beende Anwendung..." << std::endl; keepRunning.store(false, std::memory_order_relaxed); + shutdownRequested.store(true, std::memory_order_relaxed); } } @@ -70,14 +73,25 @@ int main() { // Benachrichtige systemd, dass der Service bereit ist sd_notify(0, "READY=1"); - while (keepRunning) { - std::this_thread::sleep_for(std::chrono::milliseconds(500)); + // Hauptschleife mit besserer Signal-Behandlung + while (keepRunning && !shutdownRequested) { + std::this_thread::sleep_for(std::chrono::milliseconds(100)); } + + std::cerr << "Starte sauberes Herunterfahren..." << std::endl; + + // Stoppe alle Worker for (auto &worker : workers) { worker->stopWorkerThread(); } + + // Stoppe WebSocket Server websocketServer.stop(); + + // Stoppe Message Broker broker.stop(); + + std::cerr << "Anwendung erfolgreich beendet." << std::endl; } catch (const std::exception &e) { std::cerr << "Fehler: " << e.what() << std::endl; return 1; diff --git a/yourpart-daemon.service b/yourpart-daemon.service index 3a15c43..3baa609 100644 --- a/yourpart-daemon.service +++ b/yourpart-daemon.service @@ -5,7 +5,7 @@ After=network.target postgresql.service Wants=postgresql.service [Service] -Type=simple +Type=notify User=yourpart Group=yourpart WorkingDirectory=/opt/yourpart @@ -18,6 +18,7 @@ TimeoutStartSec=30 TimeoutStopSec=30 Restart=always RestartSec=5 +NotifyAccess=main StandardOutput=journal StandardError=journal SyslogIdentifier=yourpart-daemon