特定のユーザーに対して自動的に「良い」タスクを実行する方法は?

特定のユーザーに対して自動的に「良い」タスクを実行する方法は?

私のサーバーユーザーがWebサーバー操作で "nice"コマンドを使用することを忘れ続けた場合は、開始するすべてのエントリのデフォルトの優先順位がゼロよりわずかに高くなるように設定を変更できますか?

答え1

これは/etc/security/limits.confファイルで実行できます。

ユーザーがグループのメンバーであると仮定すると、users次の行を追加できます。

@users soft nice 5

答え2

nicenice-nessは実際に望むツールではないようです。 cgroupsはそうです! (ユーザーnice自身に頼るのは構造的なミスです。)実際に気づいたように! )

Linuxでは、ユーザー、サービス、モノの「スライス」クォータを提供できます。 CPU 競合が高い場合、nice-ness を使用して特定のプロセスの優先順位を下げるのと似ていますが、より広範には I/O 帯域幅でも機能します。 RAM、プロセス数など、いくつかあります。

これはとても簡単です。ユーザーuid 1234(現在ログインしているスライスが存在する)がnginx HTTPサービスのCPU時間の1/4を取得できないように制限しているとします。

systemctl set-property user-1234.slice CPUShares=500 MemoryHigh=16G
systemctl set-property nginx.service CPUShares=2000 MemoryHigh=28G

(これらの変更は永久的です)

制限したい場合ログインしたすべてのユーザーの合計、使用user.slice

特定のユーザーを事前に制限するには、/lib/systemd/system/user-1234.sliceを作成してください。

[Unit]
Description=Goddammit stop hogging my server, Carl
Documentation=man:systemd.special(7)
Before=slices.target
CPUShares=500
MemoryHigh=2G

[Slice]
Slice=user-slice

[Install]
WantedBy=multi-user.target

答え3

私のサーバーユーザーがWebサーバー操作で "nice"コマンドを使用することを忘れ続ける場合

何か間違っているようですね/XY問題です。技術的に単純な「ユーザー」がサーバーの役割のホストへのシェルアクセスを持つことができるのはなぜですか?このシステムで他のプロセスの実行が許可されるのはなぜですか?これらのプロセスにオペレーティングシステムが提供しようとするよりも多くのCPU時間が必要なのはなぜですか?

関連情報