我怎样才能让用户将一个过程优先考虑为负面的好感?

Baa*_*arn 14 process limit not-root-user nice

我希望用户在系统上运行具有负的 nice 值的特定进程。我不能简单地将进程分叉到后台,因为这个特定程序是一个 minecraft 服务器,我依靠命令行来控制服务器。

我当前的 bash 脚本如下所示(重要部分):

sleep 10 && \
sudo renice -n $NICENESS $(ps -u $(id -u) -o "%p:%c" | sed -n "s/:java$//p") & \
java -Xmx8G -Xms2G -jar minecraft_server.jar nogui    
Run Code Online (Sandbox Code Playgroud)

sleep只是延迟renice. renice它本身ps用于使用用户自己的 ID 检查 java 进程。在不同的用户下可能有其他 java 生成实例,但 minecraft 服务器在其自己的用户minecraft下运行。

我显然不想每次启动服务器时都输入密码。
来自/etc/sudoers

minecraft ALL = NOPASSWD: /etc/renice
Run Code Online (Sandbox Code Playgroud)

有没有更优雅的方法来做到这一点?简单地使用nice不是一个选项,sudo nice bash结合NOPASSWD:选项将是一个很大的安全问题。

HBr*_*ijn 12

pam_limits.so 模块可以帮助您。

它允许您对特定的个人用户和组或通配符或用户和组的范围设置某些限制。

您可以设置的限制通常是 ulimit 设置,但也包括并发登录会话、进程、CPU 时间、默认优先级和最大优先级 (renice) 的数量。查看limits.conf 手册页了解更多信息。

例如,您可以将您的 Mindcraft 组配置为以增加的默认优先级启动所有进程,并且您可以允许他们使用 nice 和 renice 命令手动增加其重要作业的优先级,而不仅仅是降低优先级。

# /etc/security/limits.conf
# increase default and max prio for members of the mindcraft group
@mindcraft   hard priority -10
@mindcraft   hard nice     -18   
Run Code Online (Sandbox Code Playgroud)

  • 只为 `nice` 设置硬限制似乎不行,我不得不使用 `-` 设置两者。 (4认同)