1

私は AWS アマゾン ウェブ サービスを使用しており、4 つの同一のウェブ サーバーがあります。1つのサーバーからのみ実行する必要があるが、4つすべてに存在する電子メールを送信するためのcronジョブのセットアップがあります.

これらの Web サーバー上のすべてが同じで、私には合っていますが、現在、cron ジョブは 4 つすべてで実行されます。したがって、4 つのサーバーすべてでジョブを実行し、1 つだけで実行する方法の解決策を探しています。

私はデータベースを持っており、最初に tmp テーブルを使用してそのテーブルに自分自身を書き込み/登録すると、実行するのは唯一のテーブルになると考えました (他の人はこれを読み取り、この時点を超えて実行しません)。しかし、それらはすべて同一のシステムクロックを使用しているため、同時にテーブルを読み取る可能性があり、1 つがテーブルに書き込みを行っても、他の人は実行へのアクセス権も持っていると想定しているため、心配していました。

テーブルを使用すると、4 つの Web サーバーを 1 つだけに制限できますか、それとも同じクロック ファクターが邪魔になりますか?

注: サーバー名は、永続的なシステムというよりもリソースに似ているため、時間の経過とともに変化する可能性があります。(例:必要に応じて新しいものをスピンアップできます)...

これを行うより良い方法はありますか?注:別のサーバーは必要ありません。すべて同一のサーバーが必要です。

ありがとうございました

4

2 に答える 2

2

私にとっては、次のようにします。

1 - create a lock for each of the server
2 - define a list of server like ['1'=>'server ip', '2'=>'server ip',...]
3 - pass in server id in cron job as args
4 - modify the script if (lock not exists) do run then create a lock for this server, delete the lock for next server.
5 - delete the lock for the first server to start with.
于 2013-04-22T06:57:33.707 に答える
1

マシンはそれぞれ異なるホスト名を持つため、それを使用して目的のマシンでのみジョブを実行できます。たとえば、マシンが「server01」、「server02」などの場合、PHP では次のようにします。

if (gethostname() === 'server01') {
    // do the task
}

もう 1 つの方法は、すべてのサーバーに対して 1 つのサーバー イメージを用意する代わりに、わずかに異なる 2 つのイメージを用意することです。サーバー。

于 2013-04-22T06:49:59.767 に答える