我正在尝试对进程设置每个用户的限制,其中大多数都是使用 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
答案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.slice
su - user-1009