Systemd
使用 cgroups/systemd 限制每個使用者的資源使用
Debian 10:我想限制所有使用者的記憶體、CPU 等,除了
root
; 我找到了幾篇關於這個的文章,但到目前為止,它們都圍繞著 cgconfig 展開,這似乎不是現在完成的方式。我已經看到了一些使用切片的建議,因此對於 UID 1000,創建如下內容:# cat /lib/systemd/system/user-1000.slice [Unit] Description=User and Session Slice Documentation=man:systemd.special(7) Before=slices.target MemoryHigh=20M [Slice] Slice=user-slice [Install] WantedBy=multi-user.target
並使用
systemctl enable user-1000.slice
. 這似乎成功了一半:$ systemctl status user-1000.slice Warning: The unit file, source configuration file or drop-ins of user-1000.slice changed on disk. Run 'systemctl daemon-reload' to reload units. ● user-1000.slice - User Slice of UID 1000 Loaded: loaded (/lib/systemd/system/user-1000.slice; enabled; vendor preset: enabled) Drop-In: /usr/lib/systemd/system/user-.slice.d └─10-defaults.conf Active: active since Thu 2020-07-09 07:37:28 UTC; 1h 8min ago Docs: man:systemd.special(7) man:user@.service(5) Tasks: 7 (limit: 5237) Memory: 5.4M CGroup: /user.slice/user-1000.slice ├─session-15.scope │ ├─1089 sshd: jan [priv] │ ├─1107 sshd: jan@pts/1 │ ├─1108 -bash │ ├─1113 systemctl status user-1000.slice │ └─1114 pager └─user@1000.service └─init.scope ├─1092 /lib/systemd/systemd --user └─1093 (sd-pam)
但是,
MemoryHigh
未設置:$ systemctl show user-1000.slice Slice=user.slice ControlGroup=/user.slice/user-1000.slice ... MemoryHigh=infinity ...
我似乎很接近,但一定少了點什麼——那是什麼?
您錯過了列印在螢幕上的警告:
Warning: The unit file, source configuration file or drop-ins of user-1000.slice changed on disk. Run 'systemctl daemon-reload' to reload units.
當您更改 systemd 單位時,您必須
systemctl daemon-reload
讓 systemd 重新讀取它們。此外,受影響的單位需要重新啟動。也就是說,如果您希望更改適用於所有使用者,您可能應該改寫為覆蓋
user.slice
。當然,您永遠不應該編輯系統提供的文件,而是通過drop-in files使用覆蓋。