Обычный запуск команды из shell никак не даёт ей отдельного systemd unit
./backup.sh
Процесс просто становится частью cgroup текущего shell
systemd-run --scope создаёт для уже запускаемой команды отдельный scope и помещает её под контроль systemdsystemd-run --scope ./backup.sh
Теперь у процесса появляется собственная cgroup, которую можно увидеть:
systemctl status run-*.scope
Временно ограничиваем ресурсы
Например, не даём задаче использовать больше двух CPU:
systemd-run --scope -p CPUQuota=200% ./backup.sh
Или ограничиваем память:
systemd-run --scope -p MemoryMax=2G ./backup.sh
Это удобно для тяжёлых задач, которые не хочется превращать в постоянный unit
Проверяем, что ограничение реально применилось
systemd-cgls
Или для конкретного scope:
systemctl show run-*.scope \
-p ControlGroup \
-p MemoryCurrent \
-p MemoryMax
Можно увидеть отдельную cgroup и текущее потребление ресурсов
--scope и обычный systemd-run - не одно и то же
systemd-run ./backup.sh
создаёт transient service, которым systemd управляет как сервисом
А:
systemd-run --scope ./backup.sh
создаёт scope для процесса, который запускается непосредственно от текущего окружения
Это важно для интерактивных задач, отладки и временных ограничений
systemd-run --scope позволяет быстро изолировать одну тяжёлую команду по CPU, памяти или другим cgroup-ресурсам без создания unit-файла и изменения конфигурации сервера

