有类似的问题:Cgroups, limit memory per user,但该解决方案在“现代”系统中不起作用,其中 cgroups 层次结构由 systemd 管理。
简单的解决方案——模板 user-UID.slice——将不起作用,因为它不受支持,请参阅https://github.com/systemd/systemd/issues/2556。
有没有办法达到预期的效果——基于每个用户管理 CPU 和/或内存资源?
UPD:为了历史起见,我将保留我的解决方案,但systemctl set-property应在登录时调用,使用pam_exec,请参阅https://github.com/hashbang/shell-etc/pull/183。在这种方法中,用户登录和限制设置之间没有时间窗口。
我的解决方案。接口org.freedesktop.login1.Manage的/org/freedesktop/login1对象发出UserNew(u uid, o object_path)信号。我编写了一个简单的守护进程,它侦听信号,并且每次发出信号时都设置CPUAccounting=true为刚刚登录用户的切片。