ユーザーがプロセスの優先順位を否定的にフレンドリーに設定できるようにするにはどうすればよいですか?

ユーザーがプロセスの優先順位を否定的にフレンドリーに設定できるようにするにはどうすればよいですか?

ユーザーがシステム上の負の良い値で特定のプロセスを実行したいと思います。この特定のプログラムは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    

sleepただ実行を遅らせてくださいrenicereniceそれ自体は、psユーザー自身のIDを使用してJavaプロセスを確認するために使用されます。別のユーザーとして作成された別のJavaインスタンスがある可能性がありますが、Minecraftサーバーは独自のユーザーとして実行されます。私の世界

サーバーを起動するたびにパスワードを入力したくありません。
~から/etc/sudoers:

minecraft ALL = NOPASSWD: /etc/renice

これを行うよりエレガントな方法はありますか?単に使用するniceことはオプションではありませんsudo nice bashパスワードなし:オプションは大きなセキュリティ問題になります。

答え1

pam_limits.so モジュールが役に立ちます。

これにより、特定の個々のユーザーとグループ、ワイルドカード、またはユーザーとグループの範囲に特定の制限を設定できます。

設定できる制限は通常ulimit設定ですが、同時ログインセッション数、プロセス数、CPU時間、デフォルト優先順位、および最大優先順位も設定できます。詳細については、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   

答え2

reniceそれなしでは使用できませんsudo。私はマニュアルrenice(1)ページを引用しています:

スーパーユーザー以外のユーザーは、自分が所有するプロセスの優先順位のみを変更でき、niceリソース制限が設定されていない限り(Linux 2.6)、セキュリティ上の理由から、0からPRIO_MAX(20)の範囲で「nice値」を単調に増やすことができます。あります。 .12以上)。

関連情報