ユーザーがシステム上の負の良い値で特定のプロセスを実行したいと思います。この特定のプログラムは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サーバーは独自のユーザーとして実行されます。私の世界。
サーバーを起動するたびにパスワードを入力したくありません。
~から/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以上)。