Debian 10 : je veux limiter la mémoire, le CPU etc pour tous les utilisateurs sauf root; J'ai trouvé plusieurs articles à ce sujet, mais jusqu'à présent, ils tournent tous autour de cgconfig, ce qui ne semble pas être la façon dont c'est fait maintenant. J'ai vu quelques suggestions pour utiliser des tranches à la place, donc pour l'UID 1000, créez quelque chose comme :

# 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

et l'activer avec systemctl enable user-1000.slice. Cela semble fonctionner à moitié :

 $ 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:[email protected](5)
    Tasks: 7 (limit: 5237)
   Memory: 5.4M
   CGroup: /user.slice/user-1000.slice
           ├─session-15.scope
           │ ├─1089 sshd: jan [priv]
           │ ├─1107 sshd: [email protected]/1
           │ ├─1108 -bash
           │ ├─1113 systemctl status user-1000.slice
           │ └─1114 pager
           └─[email protected]
             └─init.scope
               ├─1092 /lib/systemd/systemd --user
               └─1093 (sd-pam)

Cependant, MemoryHighn'est pas défini :

 $ systemctl show user-1000.slice
Slice=user.slice
ControlGroup=/user.slice/user-1000.slice
...
MemoryHigh=infinity
...

Je semble être très proche, mais il doit y avoir quelque chose qui manque - qu'est-ce que c'est ?

answer

Vous avez manqué l'avertissement imprimé à l'écran :

Warning: The unit file, source configuration file or drop-ins of user-1000.slice changed on disk. Run 'systemctl daemon-reload' to reload units.

Lorsque vous changez d'unités systemd, vous devez systemctl daemon-reloadles faire relire par systemd. De plus, les unités affectées doivent être redémarrées.

Cela dit, si vous souhaitez que la modification s'applique à tous les utilisateurs, vous devriez probablement écraser à la user.sliceplace. Et bien sûr, vous ne devez jamais modifier les fichiers fournis par le système, mais utiliser à la place des remplacements via des fichiers d'insertion .