[CentOS6][SOS JobScheduler] ジョブでイベントを検査する


Create: 2013/03/21
LastUpdate: 2013/03/27
[ メニューに戻る ]

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


JobChain では、シーケンシャルなジョブの連携しか定義できませんでしたが、
イベントを利用することで 下図のような複雑な条件のジョブ連携 が可能になります。
(図:JobSchedulerEventマニュアルから引用)

ここでは、ジョブでイベントを検査する機能だけを試してみます。
手順については、「JobScheduler Events(PDF)」を参考にしました。
以下のような2つのジョブと JobChain を作成します。
JobChainでは、 Setback を利用して、イベントを検知するまでジョブAをリトライさせます。
ジョブA ・・・ イベント検査
 ↓
ジョブB ・・・ イベント削除

テスト(動作確認)の流れは以下のとおり。
① JobChain を実行して、イベント待ち状態にする。(Setbackでリトライ中)
② jobscheduler_event.sh コマンドを使用して手動でイベントを生成する。
③ ジョブAがリトライをやめて、JobChainが正常終了する。

1.ジョブA用の OrderJob 定義 


JOEで下図のようにジョブを定義します。
JobScheduler で用意されている Javaアプリケーションを使用してイベントの存在チェックをします。
[Classname]には、"sos.scheduler.job.JobSchedulerExistsEventJob" を設定します。


下図のようにパラメータを設定します。
[Name]には、"scheduler_event_spec"を設定し、[Value] には、"//event[@event_class='test' and @event_id='A']" を設定します。
"scheduler_event_spec" の値は、XPath 形式で設定します。
この値だと、このジョブは、(イベントクラス="test" AND イベントID="A")の条件が成り立つイベントの存在チェックをすることになります。


Setback の設定を行います。
上図で指定したイベントが存在しない場合は、このジョブを 5秒隔で60回リトライします。


2.ジョブB用の OrderJob 定義 


JOEで下図のようにジョブを定義します。
イベントクラスが"test"で、イベントIDが"A"のイベントを削除します。
SCHEDULER 関連の環境変数の値をクリアしているのは、イベント削除条件のデフォルト値として使用されないようにするためです。


3.JobChain 定義 


JOEで下図のようにJobChainを定義します。
[State]は4つ作成します。
"step1"のジョブAがエラーの場合は、指定したイベントが存在しないという意味なので、Setback でリトライします。


4.動作確認


JOCで JobChain を  実行 します。
下図のように Setback 状態になるまで待ちます。


Managerサーバに jobs ユーzでログインして、以下のようにコマンドを実行し、イベントを生成します。
"centos6" は、Managerサーバのホスト名です。
$ sos-berlin.com/jobscheduler/scheduler/scheduler_home/bin/jobscheduler_event.sh -e test -i A -w add -h centos6 -p 4444
Job Scheduler response:
OK
ジョブAがイベントを検知すると、JobChain が最後まで実行されます。
実行結果は下図のとおり。(Setbackのリトライ部分のログは一部削除してます)


一応、ちゃんとイベントが削除されているか確認してみます。
Manager サーバで以下のコマンドを実行して、ゼロと表示されれば、イベントは削除されています。
$ sos-berlin.com/jobscheduler/scheduler/scheduler_home/bin/jobscheduler_event.sh -e test -i A -w check -h centos6 -p 4444
0