[erl] Langläufer und Service-Units: simple, forking, oneshot

Welches Modul/Treiber für welche Hardware, Kernel compilieren...
Antworten
TomL

[erl] Langläufer und Service-Units: simple, forking, oneshot

Beitrag von TomL » 07.11.2016 12:48:18

Moin

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
Erstes Fazit: Für einen Langläufer ist 'oneshot' also schlichtweg ungeeignet, 'forking' wartet bis Timeout auf den Parent, bei 'simple' ist alles bestens.

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?
Zuletzt geändert von TomL am 07.11.2016 14:38:39, insgesamt 1-mal geändert.

Benutzeravatar
MSfree
Beiträge: 10741
Registriert: 25.09.2007 19:59:30

Re: Langläufer und Service-Units: simple, forking, oneshot

Beitrag von MSfree » 07.11.2016 13:37:53

oneshot sollte man nehmen, um Initialisierungen für das Betriebssystem durchzuführen. Ein typischer Anwendungsfall ist, ein Skript mit iptables-Befehlen abzuarbeiten. Eben nur einmal (oneshot) beim Systemboot.

simple ist für "Daemons", die sich nicht selbst forken, also eigentlich keine Daemons sind. Hier übernimmt systemd die Aufgabe des Forks und installiert auch einen Signalhandler, der aktiviert wird, wenn der Prozeß sich beendet hat oder abgestürzt ist. Man kann solche Prozesse sehr bequem durch systemd neu starten lassen, indem man ihnen noch das Attribut Restart=always mitgibt.

forking ist für die Vielzahl an traditionellen Daemons, wie SSH, apache...

TomL

Re: [erl] Langläufer und Service-Units: simple, forking, one

Beitrag von TomL » 07.11.2016 14:40:08

Danke!

Das passt exakt zu meiner Interpretation bzw. zu den Ergebnissen meiner praktischen Test's :THX:

Antworten