Linux systemctl Service stop vs Java

Moinsn, w3enn ich einen Java -Service habe der grad Datenbankeinträge schreibt…und ich rufe systemctl stop service oder system service stop (je nach Linux), was passiert dann genau? Wird der Service gekilled sodass das Datenbankschreiben in die Hose gehen kann oder wird der irgendwie “vorsichtig heruntergefahren”?

Hintergrund ist, wenn ich 5 Java-Services habe die mit einander kommunizieren und ich will einen updaten, wie mach ich das ohne Schäden an den Daten zu verursachen?

Kommt darauf an was im Script steht…

https://www.google.de/search?q=java+linux+signal

Ach das kann man steuern?

Meins sieht so aus:

#[Unit]
Description=my-service
After=syslog.target

[Service]
User=myUser
ExecStart=/usr/bin/java -jar -Dspring.profiles.active=live -Xms10m -Xmx6g /var/my-service/my-service.jar
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

Das ist kein Script - schau mal unter /etc/systemd/system nach dem passenden Script.

ja da hab ich das her :thinking:

Das ruft eine java jar Datei auf die executable ist. ein sh Script in dem Sinne gibts nicht

Also laut link wird ein SIGTERM gesendet und dann nach 90 sekunden ein SIGKILL. Was du also in deinem Programm machen musst ist dich auf dieses Signal zu hängen und rechtzeitig (also innerhalb dieser 90 sekunden) dein Programm zu terminieren.

Auf das signal horchen kannst du über Runtime.addShutdownHook()

Hier solltest du halt deine DB Schreiboperationen noch abschließen und deine Anwendung so gestalten, dass keine neue Operation mehr angestoßen werden kann. Wie du das nun konkret für deine Anwendung machen musst, kann dir keiner sage, da wir dein konkretes Programm nicht kennen. Aber solltest du eine REST API haben würde ich zumindest diese schon mal abschalten und anschließend warten, bis dein DB Code fertig ist.

okay - systemd läuft in der Tat etwas anders - habe mir das mal etwas genauer angeschaut, aber um die Signale kommst Du nicht herum