[CentOS6][SOS JobScheduler] 排他ロックを設定する


Create: 2013/03/24
LastUpdate: 2013/04/04
[ メニューに戻る ]

下図の環境を使用します。
環境の詳細を知りたい場合は、メニューに戻って構築手順を参照してください。


JobScheduler には、排他ロックと非排他ロックの2種類が用意されています。
ここでは、上図のJOB1とJOB2の2つのジョブを用意し、この2つが同時に実行しないよう排他ロックを使用してみます。
JOB1 を30秒間スリープさせ、JOB2 はロックが解除されるまで実行待ち状態になるようにします。
手順については、「Reference Documentation」を参考にしました。

1.ロックの定義


新規でロックを作成します。
JOEの左側のメニューで [Locks] をクリックすると下図の画面が表示されます。
[New Lock]ボタンをクリックして新しいロックを作成します。
[Lock]に "test_locl" を入力して、[Apply_lock]ボタンをクリックします。


下図のように、新しい Lock が設定されます。


2.JOB1の定義


JOB1(lock01_job) を定義します。このジョブは、30秒スリープさせます。


上記1で作成したロックを使用するように設定します。
左側メニューで[Locks]をクリックすると下図の画面になります。
[New Lock Use]ボタンをクリックして、[Lock]に "/test/test_lock" を入力し、[Apply lock use]ボタンをクリックします。
[Lock]に入力した値の "/test" は、このジョブを格納するホットフォルダ名です。


3.JOB2の定義


JOB1(lock02_job) を定義します。


上記1で作成したロックを使用するように設定します。


4.動作確認


JOCで、JOB1(lock01_job)→JOB2(lock02_job)の順番に 実行すると、下図のように表示されます。
JOB2は、実行終了したように見えますが、実行待ちの状態です。


 [Locks]タブを見ると、JOB1(lock01_job)実行中で排他ロックを保持し、JOB2(lock02_job)は、ロックが解除されるのを待っているのがわかります。


JOB1(lock01_job)の実行が終了するとロックが解除されて、自動的にJOB2(lock02_job)が実行されます。
[Last Activities]タブで、実行開始時刻を確認すると、JOB1の終了後にJOB2が実行開始していることがわかります。


JOB1の実行結果は下図のとおり。
使用しているロックが記録されています。
また、at と Current Timestamp の時間が同じなので、即時実行後、すぐに処理を開始しているのがわかります。


JOB2の実行結果は下図のとおり。
使用しているロックが記録されています。
また、at と Current Timestamp の時間が違うので、即時実行後、ロック解除待ちしていたことがわかります。