“systemctl set-property user-1009.slice CPUQuota=50%” - 无法在 user-1009.slice 上设置单元属性:未加载单元 user-1009.slice

“systemctl set-property user-1009.slice CPUQuota=50%” - 无法在 user-1009.slice 上设置单元属性:未加载单元 user-1009.slice

我正在尝试对进程设置每个用户的限制,其中大多数都是使用 sudo --user 运行的。为什么我的系统上的 user-1001 和 user-1008 有切片文件,但我在 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)

我尝试手动创建文件

# 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.

另外,这对我来说没有意义,测试进程(PID 26668)显示在 ps -U 1009 中,但它在 user-1008 的切片下运行(因为 user-1008 使用 sudo 来运行它?)

# 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

四处搜索,我所能找到的只是人们说以用户身份登录来解决此问题,但显然该用户已打开进程。我尝试在另一个终端中使用 su - user1009,但这似乎没有帮助

答案1

以防万一其他人需要解决方案,而不是仅使用 sudo,sudo systemd-run 对我有用

$ 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

答案2

我正在尝试对进程设置每个用户的限制,其中大多数都是使用 sudo --user 运行的。

为什么我的系统上的 user-1001 和 user-1008 有切片文件单位,但我无法在 1009 上获取它?

如果您现在没有运行 UID 1009 进程,那么systemd(或从技术上讲logind)将不会启动该 UID 的切片。

此外,即使您在处理过程中成功应用了任何设置如果进程全部停止运行,它们就会丢失。因为切片单元会再次停止。有时这可能是您想要的,但在我看来这可能非常令人困惑。

在嵌入式配置文件中添加所需的设置会更有意义,例如/etc/systemd/system/user-1009.slice.d/cpuquota.conf.

用于systemd-analyze verify user-1009.slice检查配置文件并systemctl daemon-reload加载它。我认为更新的配置只有在切片单元停止后才会生效。您还可以手动重新启动切片单元,但这会杀死其中运行的所有进程。


user-1009.slice如果您的流程没有时间运行,这是因为该用户的进程并未真正在内部运行pam_systemd。这可能是因为他们还没有开始使用 PAM。也可能是因为 PAM“服务”未配置为使用 pam_systemd。

sudo/su在 Linux 上应该使用 PAM。在我在基于 RedHat 和 Debian 的操作系统上看到的配置中,它使用pam_systemd.但是,还有第三种情况pam_systemd不会生效:如果您在现有用户会话中运行该命令。看https://github.com/systemd/systemd/issues/7451

最后一点解释了 的一些令人困惑的行为,即为什么您在手动运行时su没有看到任何进程。user-1009.slicesu - user-1009

相关内容