Ä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:
committed by
Torsten (PC)
parent
698160b701
commit
b05a17b4fb
20
src/main.cpp
20
src/main.cpp
@@ -20,11 +20,14 @@
|
|||||||
#include <systemd/sd-daemon.h>
|
#include <systemd/sd-daemon.h>
|
||||||
|
|
||||||
std::atomic<bool> keepRunning(true);
|
std::atomic<bool> keepRunning(true);
|
||||||
|
std::atomic<bool> shutdownRequested(false);
|
||||||
|
|
||||||
void handleSignal(int signal) {
|
void handleSignal(int signal) {
|
||||||
if (signal == SIGINT || signal == SIGTERM) {
|
|
||||||
std::cerr << "Signal erhalten: " << signal << ". Beende Anwendung..." << std::endl;
|
std::cerr << "Signal erhalten: " << signal << ". Beende Anwendung..." << std::endl;
|
||||||
|
|
||||||
|
if (signal == SIGINT || signal == SIGTERM) {
|
||||||
keepRunning.store(false, std::memory_order_relaxed);
|
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
|
// Benachrichtige systemd, dass der Service bereit ist
|
||||||
sd_notify(0, "READY=1");
|
sd_notify(0, "READY=1");
|
||||||
|
|
||||||
while (keepRunning) {
|
// Hauptschleife mit besserer Signal-Behandlung
|
||||||
std::this_thread::sleep_for(std::chrono::milliseconds(500));
|
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) {
|
for (auto &worker : workers) {
|
||||||
worker->stopWorkerThread();
|
worker->stopWorkerThread();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Stoppe WebSocket Server
|
||||||
websocketServer.stop();
|
websocketServer.stop();
|
||||||
|
|
||||||
|
// Stoppe Message Broker
|
||||||
broker.stop();
|
broker.stop();
|
||||||
|
|
||||||
|
std::cerr << "Anwendung erfolgreich beendet." << std::endl;
|
||||||
} catch (const std::exception &e) {
|
} catch (const std::exception &e) {
|
||||||
std::cerr << "Fehler: " << e.what() << std::endl;
|
std::cerr << "Fehler: " << e.what() << std::endl;
|
||||||
return 1;
|
return 1;
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ After=network.target postgresql.service
|
|||||||
Wants=postgresql.service
|
Wants=postgresql.service
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=simple
|
Type=notify
|
||||||
User=yourpart
|
User=yourpart
|
||||||
Group=yourpart
|
Group=yourpart
|
||||||
WorkingDirectory=/opt/yourpart
|
WorkingDirectory=/opt/yourpart
|
||||||
@@ -18,6 +18,7 @@ TimeoutStartSec=30
|
|||||||
TimeoutStopSec=30
|
TimeoutStopSec=30
|
||||||
Restart=always
|
Restart=always
|
||||||
RestartSec=5
|
RestartSec=5
|
||||||
|
NotifyAccess=main
|
||||||
StandardOutput=journal
|
StandardOutput=journal
|
||||||
StandardError=journal
|
StandardError=journal
|
||||||
SyslogIdentifier=yourpart-daemon
|
SyslogIdentifier=yourpart-daemon
|
||||||
|
|||||||
Reference in New Issue
Block a user