Ä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
391e5d9992
commit
d3727ad2f7
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