<div dir="ltr"><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Apr 24, 2023 at 7:04 AM jaimin bhaduri <<a href="mailto:jaimin@webuzo.com">jaimin@webuzo.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Cgroups v2 is enabled in almalinux 9.1 with 5.14.0-70.22.1.el9_0.x86_64 kernel and systemd 250 (250-12.el9_1.3).<div><br><div>Content of /etc/systemd/system/user-1002.slice.d/override.conf:<div><b>[Unit]<br>Description=User Slice for UID 1002<br><br>[Slice]<br>CPUAccounting=1<br>MemoryAccounting=1<br>IOAccounting=1<br>TasksAccounting=1<br>CPUQuota=70%<br>MemoryMax=1G<br>MemoryHigh=1G<br>IOReadBandwidthMax=/ 1G<br>IOWriteBandwidthMax=/ 1G<br>IOReadIOPSMax=/ 1000<br>IOWriteIOPSMax=/ 1000<br>TasksMax=200<br><br>[Install]<br>WantedBy=multi-user.target</b><br></div></div></div><div><b><br></b></div><div>I execute systemctl daemon-reload after saving the slice file.</div><div>Every value is getting enforced for the user when I test them by running some commands from the user's terminal.</div><div>But they dont work after I run the same commands from the root's terminal after doing su to that user.</div><div>They also dont work when a user's process is started from a php script using putenv('user_uid');.</div><div>How do I make them work for all the user's processes no matter how they start?</div></div></blockquote><div><br></div><div>Using cgroup-based limits means that something needs to actually *move* the process into the appropriate cgroup. (They are not uid-based limits!)<br></div><div><br></div><div>As php-fpm does not support cgroup management on its own, you might need to run multiple instances of php-fpm@.service (not just multiple pools in the same instance), each instance specifying "Slice=user-%i.slice" similar to how user@.service does it.</div><div><br></div><div>For `su`, you would need to configure its PAM stack to invoke pam_systemd, but this is usually *deliberately* not done, as doing so would cause other issues, especially for scripts that use `su` for non-interactive purposes. (Besides that, systemd-logind does not allow creating a new session from within another one, so the only time `su` would be allowed to do this is exactly the time when it would be undesirable...)<br></div><div><br></div><div>Instead, `machinectl shell foo@` or `systemd-run --user -M foo@.host --pty ...` could be used if you need to manually run something as another user (but as soon you need to do it twice, you should just make a .service with Slice=, or even a --user service).<br></div></div><br><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature"><div dir="ltr">Mantas Mikulėnas</div></div></div>