Process

我怎樣才能允許使用者優先處理負面友好的過程?

  • November 28, 2013

我希望使用者在系統上執行具有負 nice 值的特定程序。我不能簡單地將程序分叉到後台,因為這個特定的程序是一個我的世界伺服器,我依靠命令行來控制伺服器。

我目前的 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    

sleep只是延遲renice. renice它本身用於ps使用使用者自己的 ID 檢查 java 程序。在不同的使用者下可能會有其他的 java 生成實例,但 minecraft 伺服器在其自己的使用者minecraft下執行。

我顯然不想每次啟動伺服器時都輸入密碼。

來自*/etc/sudoers*:

minecraft ALL = NOPASSWD: /etc/renice

有沒有更優雅的方法來做到這一點?簡單地使用nice不是一個選項,sudo nice bash結合*NOPASSWD:*選項將是一個很大的安全問題。

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   

引用自:https://unix.stackexchange.com/questions/102945