Heute morgen habe ich mich mal ein wenig mit den Unterschieden dieser genannten 3 Unit-Types im Zusammenhang mit einem Langläufer befasst. Erst mal vor dem Hintergrund, dass der zu startende Prozess kein "ausgewiesener" Daemon ist. Folgendes ist dabei rausgekommen:
- simple = Prozess wird gestartet, systemd kehrt sofort zurück, Job läuft bis zum Ende durch, Job-Satus (auch während des Laufs) einwandfrei
- oneshot = Prozess wird gestartet, systemd kehrt erst bei Jobende zurück, Job läuft bis zum Ende durch, kein "sauberer" Job-Status
- forking = Prozess wird gestartet, systemd killt nach 90 Sekunden alles, was dazu gehört, kein "sauberer" Job-Status
Als nächstes galt mein Interesse allein simple und forking. Für forking habe ich dem Job nen "Parent" verpasst und nen ordentlichen Fork generiert, für simpel alles gelassen wie es war.
Beide Prozesse starten beim Boot, systemd wartet bei beiden Prozesse nicht auf deren Prozessende, sondern kehrt sofort zurück, beide Prozesse laufen den vorgegebenen Zeitraum sauber durch, beide Prozesse beenden sich ordentlich, bei beiden Prozessen meldet systemd "(code=exited, status=0/SUCCESS")
Mir ist jetzt klar, dass ich bei einem klassischen Daemon, der sich selber forken kann, den Type 'forking' verwende werde. Aber warum sollte ich bei einem einfachen Programm, welches sich nicht selber forkt, einen Parent schreiben, nur um den type 'forking' zu nutzen? Das ließe sich doch genauso gut einfach mit 'simple' erfüllen. Dabei wars noch nicht mal notwendig, den Job mit & zu starten. Das klappte einfach so.....
Hat dazu jemand vielleicht ne Idee... oder noch besser, ne Antwort?