もう少し具体的に言うと:
私は、世界中で利用できるようになるはずのWebアプリケーションを備えたDebian SqueezeLinuxマシンを持っています。これまで、地域のユーザーエクスペリエンスに大きな影響を与えることなく、(ヨーロッパで)毎晩リソースを消費するcronジョブがたくさんありました。しかし、今ではサーバーがいつでも遅くなる余裕はありません。
すべてのcronスクリプト(cron.dailyなど)にNiceとioniceの優先順位を継承させる方法はありますか?
貢献してくれてありがとう!
ミゲル
Niceとioniceがすでに設定されている状態で実行するようにcrondサービスを設定することをお勧めします。
http://b.zekjur.net/2012/09/23/systemd-ionice.html
しかし、私はそれをテストしていないので、何らかの方法でそれを保証することはできません。
それが機能しない場合、またはそれが十分に役に立たない場合は、cgroupを構成する必要があります。
はい...
スクリプトに特定の環境変数のセットを提供させることも、スクリプト内からNice/ioniceを実行することもできます...
ただし、これは問題の適切な解決策ではありません。
Nice
とionice
は長期的な解決策としては適切ではありません。 ionice
は、実際には、パフォーマンスベースのLinuxカーネルスケジューリングアルゴリズムの一部には影響しません。 CFQスケジューラー で動作しますが、サーバーシステムで 期限スケジューラー を使用する可能性があります。これは、プロセスにニース/イオニスを強制しようとするよりも大きな影響を与える可能性があります。これらのcronジョブを別のLinuxユーザーで実行するのがおそらく最善であり、優先度を低く制限することができます。そのようなユーザーがbatchuser
であるとしましょう。あなたの/etc/security/limits.conf
、このユーザーのエントリを追加します(-19から19、19が最低の優先度):
batchuser - priority 19
次に、cronからであろうとなかろうと、このユーザーによって開始されたプロセスはすべて、この優先順位を継承します。スクリプトを変更したり、設定する環境やプロファイルを変更したりする必要はありません。
http://manpages.debian.org/cgi-bin/man.cgi?query=limits.conf