ユーザーに、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。
サーバーを起動するたびにパスワードを入力したくないのは明らかです。
from / etc/sudoers:
minecraft ALL = NOPASSWD: /etc/renice
これを行うよりエレガントな方法はありますか?単にNice
を使用することはオプションではありません。Sudo Nice bash
NOPASSWD:オプションと組み合わせると、セキュリティ上の大きな問題になります。
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
renice
なしでSudo
を使用することは不可能です。 renice(1)
manページから引用します:
スーパーユーザー以外のユーザーは、自分が所有するプロセスの優先度のみを変更でき、Niceリソース制限がない限り、(セキュリティ上の理由から) `` Nice値 ''を0からPRIO_MAX(20)の範囲内で単調にしか増加できませんセット(Linux 2.6.12以降)。