web-dev-qa-db-ja.com

cronデーモンによって実行されるすべてのスクリプトにNiceとioniceの優先順位を割り当てることは可能ですか?

もう少し具体的に言うと:

私は、世界中で利用できるようになるはずのWebアプリケーションを備えたDebian SqueezeLinuxマシンを持っています。これまで、地域のユーザーエクスペリエンスに大きな影響を与えることなく、(ヨーロッパで)毎晩リソースを消費するcronジョブがたくさんありました。しかし、今ではサーバーがいつでも遅くなる余裕はありません。

すべてのcronスクリプト(cron.dailyなど)にNiceとioniceの優先順位を継承させる方法はありますか?

貢献してくれてありがとう!

ミゲル

3
Miguel ZP

Niceとioniceがすでに設定されている状態で実行するようにcrondサービスを設定することをお勧めします。

http://b.zekjur.net/2012/09/23/systemd-ionice.html

しかし、私はそれをテストしていないので、何らかの方法でそれを保証することはできません。

それが機能しない場合、またはそれが十分に役に立たない場合は、cgroupを構成する必要があります。

2
TechnoJoe

はい...

スクリプトに特定の環境変数のセットを提供させることも、スクリプト内からNice/ioniceを実行することもできます...

ただし、これは問題の適切な解決策ではありません。

  • スクリプトがリソースを争わないように、スクリプトをオフセットまたはずらすことができますか?
  • タイミングやシステムアクティビティのパターンを理解していますか?例えば。 02:00から04:00の間は、システム上のユーザーが非常に少ないため、メンテナンススクリプトを実行するのに適した時期です。
  • サーバーに十分なリソースがありますか?
  • Niceioniceは長期的な解決策としては適切ではありません。 ioniceは、実際には、パフォーマンスベースのLinuxカーネルスケジューリングアルゴリズムの一部には影響しません。 CFQスケジューラー で動作しますが、サーバーシステムで 期限スケジューラー を使用する可能性があります。これは、プロセスにニース/イオニスを強制しようとするよりも大きな影響を与える可能性があります。
2
ewwhite

これらの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

0
Joshua Huber