どうすればユーザーがプロセスに負の優しさを優先させることができますか?


12

ユーザーがシステムで特定のプロセスを実行して、負の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    

sleep単にの実行を遅らせreniceます。reniceそれ自体がps、ユーザー自身のIDを使用してJavaプロセスをチェックするために使用します。さまざまなユーザーの下でJavaが生成される他のインスタンスが存在する可能性がありますが、minecraftサーバーは独自のユーザーminecraftで実行されます。

サーバーを起動するたびにパスワードを入力したくないのは明らかです。
以下からの/ etc / sudoersファイル

minecraft ALL = NOPASSWD: /etc/renice

これを行うよりエレガントな方法はありますか?NOPASSWDと組み合わせて、単に使用することniceはオプションではありませんオプションは大きなセキュリティ問題になります。sudo nice bash

回答:


9

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

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

設定できる制限は通常、ulimit設定ですが、同時ログインセッションの数、プロセス、CPU時間、デフォルトの優先順位、最大の優先順位(renice)にも適用されます。詳細については、limits.confのmanページを確認してください。

たとえば、すべてのプロセスをデフォルトの優先度を上げて開始するようにマインドクラフトグループを設定でき、優先度を下げるだけでなく、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   

4
のハードリミットのみを設定してもnice機能しないようです-。両方を設定し、を使用する必要がありました。
Baarn、2013年

Ubuntu 16.04では私にはまったく機能しないようです。私はpriority-10とnice-15に設定しており、何かに "nice -n -2"を使用しようとしても、常に "permission denied"になります。再起動する必要がありますか?このアドバイスに従って、ログアウトして再度ログインしました。
Richard Wiseman

以前の投稿を更新...再起動してからpriority設定が有効であることを発見しましたが、この設定ではnice優先度を下げることしかできません。デフォルトの優先度で何かを開始すると、-10になります。renice-9まで処理できますが、renice-10に戻すことはできません。
Richard Wiseman

更新2:解決しました!hard問題の原因となったのはそれを使用していたことです。私はそれを-代わりに変更し、すべて正常に動作します。 この答えは私がそれの一番下に到達するのに役立ちました。問題は、ソフトリミットが邪魔になっていて、おそらくハードリミットを無効にしていたことだと思います。とにかく、私のためにそれを修正する-代わりにhard
Richard Wiseman

1

reniceなしで使用することsudoは不可能でしょう。私はrenice(1)manページから引用します:

スーパーユーザー以外のユーザーは、自分が所有するプロセスの優先度のみを変更でき、適切なリソース制限がない限り、(セキュリティ上の理由から)0からPRIO_MAX(20)の範囲内で単調にのみ「素敵な値」を増やすことができますセット(Linux 2.6.12以降)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.