scheduler.every '1m', :overlap => false, :mutex => "my_lock" do
something...
end
このスケジューラのジョブは前の実行が終了するのを待つか、前の実行がまだ実行中であることがわかったらスキップしますか?重複変数falseとmutex変数が存在する場合、Rails Rufusスケジューラのジョブはスキップされますか?
scheduler.every '1m', :overlap => false, :mutex => "my_lock" do
something...
end
このスケジューラのジョブは前の実行が終了するのを待つか、前の実行がまだ実行中であることがわかったらスキップしますか?重複変数falseとmutex変数が存在する場合、Rails Rufusスケジューラのジョブはスキップされますか?
単一のプロセスケースと複数のプロセスケースの2つのケースが考えられます。
複数のプロセスは、複数のRubyプロセスを使用するために作成/チューニングされたサーバーを使用する場合に発生します。サーバーによって
は、私はWEBrickに、ユニコーン、乗客、プーマ、などを意味する...どちらの場合も、
は、オーバーラップはミューテックスの前に考えられています。
単一のプロセスケースでは、overlap => false
が最初に起動し、スケジューラは重複している受信ジョブをスキップします。ミューテックスは(ジョブが重複していない場合)考慮され、ミューテックスが同じジョブのインスタンスまたは同じミューテックスを指すジョブのインスタンスによって解放されるまで、ジョブを待機させる可能性があります。
、あなたのRubyプロセスのそれぞれに、スケジューラを持つに終わるかもしれないとoverlap
とmutex
かもしれないは、地元のRubyプロセスの中で、彼らはあるが、しかし、あなたが持っているのでは、尊敬ではないように見えます...
複数のRubyプロセスを提供するサーバーがあり、そのジョブで単一のrufus-schedulerを動作させたい場合は、https://github.com/jmettraux/rufus-scheduler#lockfile--mylockfiletxtとhttps://github.com/jmettraux/rufus-scheduler#scheduler_lockを読まなければなりません。この主題に特化した複数のスタックオーバーフローの質問。