1

I'm trying to set per-user limits on processes, most of them are run with sudo --user. Why do user-1001 and user-1008 on my system have the slice files, but I can't get it on 1009?

# systemctl set-property user-1009.slice CPUQuota=50%
Failed to set unit properties on user-1009.slice: Unit user-1009.slice is not loaded.

# systemctl status user-1009.slice
● user-1009.slice
   Loaded: loaded
   Active: inactive (dead)

I tried manually creating the file

# touch /etc/systemd/system/user-1009.slice

# systemctl status user-1009.slice
● user-1009.slice
   Loaded: masked (/etc/systemd/system/user-1009.slice; masked; vendor preset: disabled)
   Active: inactive (dead)

# systemctl set-property user-1009.slice CPUQuota=50%
Failed to set unit properties on user-1009.slice: Unit user-1009.slice is not loaded.

Also this doesn't make sense to me, the testprocess (PID 26668) shows in ps -U 1009, but it's running under the slice for user-1008 (because user-1008 used sudo to run it?)

# ps -U 1009 ; systemctl status user-1008.slice
  PID TTY          TIME CMD
15727 pts/1    00:00:00 bash
26668 ?        00:00:00 testprocess
● user-1008.slice - User Slice of testuser
   Loaded: loaded (/run/systemd/system/user-1008.slice; static; vendor preset: disabled)
  Drop-In: /run/systemd/system/user-1008.slice.d
           └─50-After-systemd-logind\x2eservice.conf, 50-After-systemd-user-sessions\x2eservice.conf, 50-Description.conf, 50-TasksMax.conf
   Active: active since Thu 2018-08-30 19:35:01 EDT; 2 days ago
   CGroup: /user.slice/user-1008.slice
           └─session-1801668.scope
             └─26668 ./testprocess

Searching around, all I could find is people saying to login as the user to fix this, but obviously the user has processes open. And I tried using su - user1009 in another terminal, but that didn't seem to help

0

Just in case someone else needs a solution, instead of using just sudo, sudo systemd-run worked for me

$ sudo systemd-run --uid=1009 --slice=user-1009 sleep 10

# ps -U 1009 ; systemctl status user-1009.slice

PID TTY TIME CMD

20199 ? 00:00:00 sleep

● user-1009.slice

Loaded: loaded

Active: active since Sun 2018-09-02 01:46:57 EDT; 2s ago

CGroup: /user.slice/user-1009.slice

      └─run-20198.service

        └─20199 /bin/sleep 10

https://www.reddit.com/r/linuxquestions/comments/9c9dka/issue_with_systemctl_setproperty_user1009slice

  • I don't think this can help, see question comment. And I think it's a bad idea because in some cases it will work, and then stop working when the user logs out and back in. I think, if you did have a case where this seems to work, it would make more sense to add the setting in a drop-in config file for user-1009.slice. Use systemd-analyze verify user-1009.slice to check the config file, and systemctl daemon-reload to apply it. – sourcejedi Sep 2 '18 at 7:59
  • Thanks for posting your answer btw, that's absolutely what we like people to do :) – sourcejedi Sep 2 '18 at 8:04
0

I'm trying to set per-user limits on processes, most of them are run with sudo --user.

Why do user-1001 and user-1008 on my system have the slice files units, but I can't get it on 1009?

If you aren't running the UID 1009 processes right now, then systemd (or technically logind) will not start the slice for that UID.

Also, even if you successfully apply any settings while the processes are running, they will be lost if the processes all stop running. Because the slice unit will be stopped again. Sometimes this might be what you want, but it sounds to me like it could be very confusing.

It would make more sense to add your desired settings in a drop-in config file, e.g. /etc/systemd/system/user-1009.slice.d/cpuquota.conf.

Use systemd-analyze verify user-1009.slice to check the config file, and systemctl daemon-reload to load it. I think the updated config will not take effect until after the slice unit has been stopped. You can also restart the slice unit manually, but this will kill any processes running inside it.


If you don't have user-1009.slice when your processes are running, it's because the processes of that user are not really being run inside pam_systemd. This might be because they're not started using PAM. Also it might be because the PAM "service" is not configured to use pam_systemd.

sudo/su on Linux should use PAM. And in the configurations I've seen on RedHat and Debian based OS's, it uses pam_systemd. But, there is a third case where pam_systemd would not take effect: if you are running the command inside an existing user session. See https://github.com/systemd/systemd/issues/7451

That last point explains some confusing behaviour of su, i.e. why you didn't see any processes in user-1009.slice when you manually ran su - user-1009.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.