Большинство воспринимает
systemd-run как инструмент для запуска сервисов. Но режим --scope запускает команду во временном scope unit, сразу помещая её и всё дерево процессов в отдельную cgroup, где можно задать ограничения.Например, если большая сборка начинает вытеснять всё остальное из памяти, достаточно выполнить её через
systemd-run:systemd-run --user --scope \
-p MemoryHigh=1536M \
-p MemoryMax=2G \
make -j32
Теперь ограничения действуют только на эту команду и всё её дерево процессов. После завершения временная
cgroup автоматически исчезнет.Точно так же можно ограничить использование процессора, не меняя приоритет процесса (
nice решает другую задачу):systemd-run --user --scope \
-p CPUQuota=200% \
npm test
Или собрать сразу несколько политик для ресурсоёмкой задачи:
systemd-run --user --scope \
-p MemoryMax=4G \
-p CPUQuota=300% \
-p IOWeight=100 \
cargo build --release
Для работы ограничений требуется systemd с поддержкой соответствующих cgroup-контроллеров (обычно современные дистрибутивы с cgroup v2).
🔥
systemd-run --scope позволяет применять возможности cgroups к любой команде одной строкой, без создания сервисов и постоянных unit-файлов.🚪 Linux Ready | #совет
