
Ich habe einen Server installiert, den ich immer im Terminal ausführen muss. Der Befehl sieht so aus
software server
Jetzt möchte ich, dass dies im Hintergrund läuft, ohne dass das Fenster geöffnet bleiben muss. Ich habe darüber nachgedacht, einen Dienst zu erstellen. Mein software.service sieht so aus
[Unit]
Description=Software Server
[Service]
Type=simple
ExecStart=/opt/software/bin/software server
Allerdings muss in allen Diensten und Anleitungen ein ExecStop definiert werden. Wie mache ich das, ohne dass der Server es wirklich unterstützt? Kann ich den Prozess beim Stoppen einfach beenden?
Irgendwelche Vorschläge, wie ich mein Problem lösen kann (muss kein Dienst sein)
Antwort1
https://www.freedesktop.org/software/systemd/man/systemd.service.html
Relevanter Teil, Hervorhebung von mir:
ExecStop=
Auszuführende Befehle zum Stoppen des über ExecStart= gestarteten Dienstes. Dieses Argument akzeptiert mehrere Befehlszeilen und folgt demselben Schema wie oben für ExecStart= beschrieben.Die Verwendung dieser Einstellung ist optional. Nachdem die in dieser Option konfigurierten Befehle ausgeführt wurden, wird davon ausgegangen, dass der Dienst gestoppt ist und alle für ihn verbleibenden Prozesse entsprechend der Einstellung KillMode= (siehe systemd.kill(5)) beendet werden. Wenn diese Option nicht angegeben ist, wird der Prozess durch Senden des in KillSignal= oder RestartKillSignal= angegebenen Signals beendet, wenn ein Dienstestopp angefordert wird.Das Ersetzen von Spezifizierern und Umgebungsvariablen wird unterstützt (einschließlich $MAINPID, siehe oben).
Beachten Sie, dass es normalerweise nicht ausreicht, für diese Einstellung einen Befehl anzugeben, der den Dienst nur zum Beenden auffordert (beispielsweise indem er ihm eine Art Beendigungssignal sendet), aber nicht darauf wartet. Da die verbleibenden Prozesse der Dienste gemäß KillMode= und KillSignal= oder RestartKillSignal= wie oben beschrieben unmittelbar nach Beendigung des Befehls beendet werden, führt dies möglicherweise nicht zu einem sauberen Stopp. Der angegebene Befehl sollte daher eine synchrone Operation sein, keine asynchrone.
Undhttps://www.freedesktop.org/software/systemd/man/systemd.kill.html#sagt uns:
Der Standardwert ist SIGTERM.
Also: Wenn Sie ExecStop nicht angeben und ausführen, systemctl stop software_server
führt SystemD das Äquivalent von aus kill -15
.