Ansicht umschalten
Avatar von arne anka
  • arne anka

mehr als 1000 Beiträge seit 25.02.2000

systemd: JAR als Service mit Dependency

Moin,

ich habe zwei SpringBoot-JARs, die nacheinander gestartet werden sollen.

JAR A ist der Config-Server.
JAR B die eigentliche App.

JAR B soll erst gestartet werden, wenn JAR A komplett gestartet ist und Requests entgegennimmt.

Im Prinzip eine simple Anforderung, jedoch offenbar mit Systemd-Service nicht zu lösen:
- entweder wird unmittelbar nachdem A angestossen wurde gleich B gestartet, sodass A natürlich noch nicht bereit ist
- oder A wartet ewig in "activating (start)" bis B irgendwann in ein Timeout läuft und behauptet, A könnte nicht gestartet werden

Lt Google bin ich damit nicht allein, aber es scheint auch niemand eine funktionierende Lösung zu haben.
Am nächsten kommt noch die Idee, im B.service

ExecStartPre=/usr/bin/sleep 5

zu verwenden, aber das ist doch lächerlich.

A.service:
mit `forking` hängt es bis zum Timeout,
mit `oneshot` wird es sofort wieder beendet, auch mit `RemainAfterExit=true` (was laut der unleserlichen man-Page doch angeblich genau für mein Szenario passen soll)
mit allen anderen Type-Optionen wird nicht gewartet

[Unit] Description=A service After=network.target [Service] Type=forking ExecStart=/opt/A.jar SuccessExitStatus=143 TimeoutSec=1 [Install] WantedBy=multi-user.target

B.service:

[Unit] Description=B service After=A.service Requires=A.service [Service] Type=simple ExecStart=/opt/B.jar SuccessExitStatus=143 TimeoutSec=30 Restart=always RestartSec=30 [Install] WantedBy=multi-user.target

Das Posting wurde vom Benutzer editiert (06.07.2021 19:54).

Bewerten
- +
Ansicht umschalten