web-dev-qa-db-ja.com

ユーザーのcronジョブがサーバーをクラッシュさせないようにする方法は何ですか?

共有サーバー上のユーザーのcronジョブがすべて同時に実行され、競合に巻き込まれることがかなり頻繁に発生します(私が知る限りでは)。そのため、負荷が爆発し、Nagiosが怒ったり、Apacheが応答を停止したり、タイムアウトしたためにSSHで接続できなかったりします。ユーザーがcronを実行できないと一方的に判断できる立場にはありませんが、 pgrep crond | wc-lが> 50を返すこの問題に対処するため。

任意の時点で実行されるcrondプロセスの数を制限することで、それらをずらすことは可能であるように思われます(たとえば、一部のプロセスがハッキングが少なくなるまでSIGSTOPを送信するなど)が、良いリードはまだ見つかりません。

ハードウェア:4 CPU以上、ローエンドは最大8GBのメモリを搭載したDell 1435、RAID 10 WD EADS主にPleskとcPanelですが、いくつかの邪悪なSpheraシステムもあります。

この問題にどのように対処しますか、sf?

7
Wyatt

cron.allowおよびcron.denyを使用してcronへのユーザーアクセスを制限するか、 PAM Limits を使用してCPU使用率、プロセス数などを制限できます。それとは別に、解決策は、ユーザーによるcronジョブを監視および処理するための何かを作成することです。これは、cronには実行するジョブの数に実際には制限がないためです。

CPanelには、同時に実行されているcronジョブの数について何かがあると思いますが、それは特定のツールです(確かではありません)。

5
coredump

私はあなたがそれらの問題の1つを持っていると思います:

  • crontabを同時に実行するのに十分なメモリがありません。次の方法で修正できます。

    • rAMを追加する
    • ユーザーが割り当てることができる最大メモリを制限する
    • 同時ジョブの数を減らすためにジョブを再スケジュールします-crondを置き換えて、別のスケジューラーを使用する必要がある場合があります
  • 高いI/O。次の方法で修正できます。

    • ioniceでI/O優先度を下げる
    • 同時ジョブの数を減らすためにジョブを再スケジュールします

マシンがスワップしているかどうかを確認し、夜間にスワップしていない場合は、cron I/O優先度クラスをアイドルに変更します。

Sudo ionice -c 3 -p $(pgrep cron)
2

私は常にランダムな時間(特に数分)でcronジョブをスケジュールしました。私はよく、次のように深夜に実行されるcronの例を目にします。

0 0 * * *  /usr/bin/echo "Job ran"

あなたがそのように定義された多くの仕事を持っているならば、あなたはトラブルを求めています。残念ながら、これらは多くの場合、長時間実行されるシステムジョブです。また、バッチプロセスウィンドウ全体で異なる時間にジョブをスケジュールする傾向があります。 (23から05)時間。

Ubuntuで使用されている新しいcron仕様が気に入っています。これには、実行するジョブを指定するための/etc/cron.*ディレクトリがいくつかあります。それらは、負荷を並列に制限するのではなく、順番に実行されます。

/etc/spool/cron/crontabsにあるファイルで何がスケジュールされているかを確認できるはずです。これらのファイルを読み取るには、rootアクセスが必要です。問題を引き起こしているのがユーザーである場合は、問題について話し合ってください。

/var/log/syslogでCRONエントリをチェックして、何がいつ実行されているかを確認することもできます。

1
BillThor