Müssen Prozesse in cgroups bei jedem Start festgelegt werden? Wenn ja, wie kann man sie beibehalten?

9

Ich habe diese Antwort auf eine Frage zum Festlegen von Grenzwerten für Prozesse mithilfe von cgroups gelesen. Die angegebene Stichprobe legt Grenzen für einen Prozess fest (im Beispiel sshd). In der Antwort wird die PID des Prozesses manuell eingestellt. Dies wäre für meine Zwecke inakzeptabel. Ich möchte, dass für Prozesse, die von einer bestimmten Anwendung aus gestartet werden, immer die festgelegten Grenzwerte festgelegt werden, unabhängig davon, wann sie gestartet werden oder wie viele solcher Prozesse gestartet werden.

Vielleicht ist aus dem Beispiel nicht ersichtlich, wie dies geschehen würde, daher wäre auch eine klare Erklärung oder ein Link zu einer willkommen. Das Beispiel im Kernel cgroups.txt scheint dasselbe Modell wie oben angegeben zu verwenden .

Casualunixer
quelle

Antworten:

6

Der einfachste Weg ist die Verwendung, systemddie sshdohnehin für Sie verantwortlich sein kann (abhängig von der Verteilung). Sie können die Grenzwerte einfach in der Gerätedatei konfigurieren sshd. systemdSetzt ohnehin alle Dienste in separate Gruppen.

Ohne systemddie einfachste Lösung ist wahrscheinlich eine Änderung des sshdStartskripts (beachten Sie, dass es nicht durch ein Update überschrieben wird; es kann eine gute Idee sein, es auf einen anderen Namen zu kopieren und das ursprüngliche Skript zu deaktivieren).

Hauke ​​Laging
quelle
Es gibt eine problematische App, deren Aufräumarbeiten großartig wären, das ist nicht sshd. Es ist nur so, dass sshd im Beispiel verwendet wurde. Vermutlich können Sie cgroups auf jeden Prozess anwenden. Ein Skript ist möglicherweise die einfachste Lösung. Es sah jedoch so aus, als wären Gruppen eine gute Antwort gewesen.
Casualunixer
@casualunixer Sie müssen nur eine Unit-Datei für Ihre App schreiben. Sie können es so konfigurieren, dass es beim Booten automatisch oder nur manuell gestartet wird.
Hauke ​​Laging
@laging, wenn Sie eine Beispiel-Unit-Datei in einer Antwort oder einen Zeiger für die Dokumentation auf eine ähnliche geben könnten, wäre dies wünschenswert.
Casualunixer
@casualunixer Es ist genau dort, wo man es erwarten würde: man systemdführt zu man 5 systemd.unitführt zu man 5 systemd.service. Auf meinem System ist die SSH-Datei /usr/lib/systemd/system/sshd.service.
Hauke ​​Laging
Ah, da ich systemd nicht installiert habe, obwohl dies das Thema dieser Antwort ist, war es nicht sofort offensichtlich.
Casualunixer