Ändere den Typ des Services in der Datei yourpart-daemon.service von 'simple' auf 'notify' und füge die Option NotifyAccess hinzu. Verbessere die Signalverarbeitung in main.cpp, um ein sauberes Herunterfahren der Anwendung zu ermöglichen und die Hauptschleife anzupassen.

This commit is contained in:
Torsten Schulz (local)
2025-09-01 15:13:56 +02:00
committed by Torsten (PC)
parent 391e5d9992
commit d3727ad2f7
2 changed files with 19 additions and 4 deletions

View File

@@ -20,11 +20,14 @@
#include <systemd/sd-daemon.h>
std::atomic<bool> keepRunning(true);
std::atomic<bool> 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;

View File

@@ -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