GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Deaktivieren Sie einen systemd-Dienst nach einer Leerlaufzeit

Die Socket-Aktivierung in systemd kann auf zwei Arten funktionieren:

  • Accept=true :systemd behält den lauschenden Socket bei, akzeptiert jede eingehende Verbindung, erzeugt für jede Verbindung einen neuen Prozess und übergibt den eingerichteten Socket an ihn. Dieser Fall ist trivial (jeder Prozess wird beendet, wenn er fertig ist).
  • Accept=false :systemd erstellt den Listening-Socket und überwacht ihn auf eingehende Verbindungen. Sobald einer hereinkommt, spawnt systemd den Dienst und übergibt ihm den Listening-Socket. Der Dienst akzeptiert dann die eingehende Verbindung und alle nachfolgenden. Systemd verfolgt nicht mehr, was auf dem Socket passiert, also kann es keine Inaktivität erkennen.

Im letzteren Fall besteht meiner Meinung nach die einzige wirklich saubere Lösung darin, die Anwendung so zu ändern, dass sie beendet wird, wenn sie einige Zeit inaktiv ist. Wenn Sie das nicht tun können, könnte eine grobe Problemumgehung darin bestehen, cron oder einen systemd-Timer einzurichten, um den Dienst einmal pro Stunde zu beenden. Dies könnte eine vernünftige Annäherung sein, wenn der Dienst nur sehr selten gespawnt wird.

Beachten Sie, dass der Anwendungsfall wahrscheinlich ziemlich selten ist. Ein Prozess, der in poll()/select() sitzt und auf eine Verbindung wartet, verbraucht keine CPU-Zeit, daher ist die einzige Ressource, die in dieser Situation verwendet wird, der Arbeitsspeicher. Es ist wahrscheinlich sowohl einfacher als auch effizienter, einfach einen Swap einzurichten und den Kernel entscheiden zu lassen, ob es sich lohnt, den Prozess die ganze Zeit im RAM zu halten oder nicht.


Linux
  1. Verwalten Sie den Start mit systemd

  2. 10 praktische systemd-Befehle:Eine Referenz

  3. So erstellen Sie einen Systemd-Dienst unter Linux

  4. Hinzufügen eines neuen Dienstes zu Linux systemd

  5. Linux – Speicherort des Fsck-Skripts?

Systemctl-Befehle zum Verwalten des Systemd-Dienstes

Verwenden von systemd-Funktionen zum Sichern von Diensten

Verwalten von cgroups mit systemd

So starten Sie einen systemd-Dienst nach der Benutzeranmeldung und stoppen ihn vor der Benutzerabmeldung

Wie sage ich in der systemd-Dienstdatei, dass USB bereit ist?

Das System verweigert SSH und bleibt nach der systemd-Installation beim Hochfahren hängen