Cgroups with systemd
Version vom 11. Januar 2023, 13:48 Uhr von Thomas.will (Diskussion | Beiträge) (→Starten des Dienstes)
- Standardmäßig erstellt systemd eine neue cgroup unter system.slice für jeden Dienst, den es überwacht.
- Das ausführen von systemd-cgls zeigt die folgenden Dienste unter system.slice (die Ausgabe ist der Kürze halber abgeschnitten):
- Sie können dieses Verhalten ändern, indem Sie die systemd-Dienstdatei bearbeiten.
- Es gibt drei Optionen in Bezug auf die cgroup-Verwaltung mit systemd:
- Bearbeiten der Servicedatei selbst.
- Verwendung von Drop-in-Dateien.
- Verwenden von systemctl set-property-Befehlen, die mit dem manuellen Bearbeiten der Dateien identisch sind, aber systemctl erstellt die erforderlichen Einträge für Sie.
Auf diese gehe ich weiter unten näher ein.
Servicedateien bearbeiten
- Lassen Sie uns die Unit-Datei selbst bearbeiten.
- Dazu habe ich eine sehr einfache Unit-Datei erstellt, die ein Skript ausführt:
Unit Datei
- /etc/systemd/system/generate-load.service
[Service] Type=oneshot ExecStart=/usr/local/bin/generate_load.sh TimeoutSec=0 StandardOutput=tty RemainAfterExit=yes [Install] WantedBy=multi-user.target
Das Skript
- cat /usr/local/bin/generate_load.sh
#!/bin/bash /usr/bin/cat /dev/urandom > /dev/null &
Starten des Dienstes
- systemcl start generate-load.service
- systemd-cgls
Control group /: ... └─system.slice ├─prog.service │ └─47462 netcat -lp 99 -s 127.0.0.1 ├─systemd-udevd.service │ └─212 /lib/systemd/systemd-udevd ├─cron.service │ └─296 /usr/sbin/cron -f ├─systemd-journald.service │ └─192 /lib/systemd/systemd-journald ├─ssh.service │ └─410 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups ├─rsyslog.service │ └─303 /usr/sbin/rsyslogd -n -iNONE ├─generate-load.service │ └─50387 /usr/bin/cat /dev/urandom ...
Eigner Slice
- Was passiert, wenn ich der systemd-Dienstdatei die folgende Zeile hinzufüge?
Slice=my-beautiful.slice
- Die Ausgabe von systemd-cgls zeigt etwas Merkwürdiges. Der generate-load.service ist nun tief verschachtelt:
- systemd-cgls
Control group /: -.slice ├─my.slice │ └─my-beautiful.slice │ └─my-beautiful.slice │ └─generate-load.service │ └─53737 /usr/bin/cat /dev/urandom
- Warum ist das? Die Antwort hat damit zu tun, wie systemd verschachtelte cgroups interpretiert.
- Kinder werden folgendermaßen deklariert: -.slice. Da systemd versucht, hilfreich zu sein, wenn ein übergeordnetes Element nicht existiert, erstellt systemd es für Sie.
- Wenn ich Unterstriche _ anstelle von Bindestrichen verwendet hätte, wäre das Ergebnis so gewesen, wie Sie es erwartet hätten:
Verwendung von Drop-in-Dateien
- Drop-in-Dateien für systemd sind ziemlich einfach einzurichten.
- Erstellen Sie zunächst ein geeignetes Verzeichnis basierend auf dem Namen Ihres Dienstes in /etc/systemd/system.
- Führen Sie im cat-Beispiel den folgenden Befehl aus:
- mkdir -p /etc/systemd/system/prog.service.d/
- Diese Dateien können beliebig organisiert werden.
- Sie werden basierend auf der numerischen Reihenfolge ausgeführt, daher sollten Sie Ihre Konfigurationsdateien etwa 10-CPUSettings.conf benennen.
- Alle Dateien in diesem Verzeichnis sollten die Dateierweiterung .conf haben und erfordern, dass Sie jedes Mal, wenn Sie eine dieser Dateien anpassen, systemctl daemon-reload ausführen.
- Ich habe zwei Drop-In-Dateien erstellt, um zu zeigen, wie Sie verschiedene Konfigurationen aufteilen können.
- Die erste ist 00-slice.conf. Wie unten zu sehen ist, richtet es die Standardoptionen für ein separates Slice für den cat-Dienst ein: