Cgroups with systemd: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| Zeile 33: | Zeile 33: | ||
<pre> | <pre> | ||
Control group /: | 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 | ||
| + | ... | ||
</pre> | </pre> | ||
Version vom 11. Januar 2023, 13:44 Uhr
- 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 ...
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: