このサンプルでは1列のjob chain(chain1)が完了した後に2つのJob(testjob1,testjob2)が並列実行され、再度1列のjob chain(chain2)を実行します。
※SOS社のhow toから抜粋
使い方
・添付ファイル「parallel」をダウンロードし、インストールしたJobSchedulerの{SCHEDULER_HOME}/config/live以下に解凍します。
・(オプション)サンプルJob(jobA11, jobB1, testjob1, testjob2, jobC1)のスクリプトを好きなようにカスタマイズします。
・解凍したJobを実行するために、該当JobScheudlerのJOCにアクセスします。(http://scheduler_host:scheduler_port)
・JOCのJOB CHAINSタブを開き、"Show orders"を有効にする為にチェックボックスにチェックします。
・parallel/parallel/chain1 を探します。
・右クリックメニューで"Add order"を選択します。
・デフォルトのまま、submitボタンをクリックします。
このサンプルではchain1に対してorderが発行します。すると、まずjobA11が稼動し、次にjobB1が稼動します。chain1(=jobB1)が完了すると後続Jobとしてtestjob1とtestjob2が稼動します。これら2jobが双方とも終了するとjobC1が最後に稼動します。
仕組み
JobChainは単体だとJobの並列実行がサポートされていません。この例ではjobB1が正常終了した際に後続Jobを稼動させるXMLコマンド(<order>)を発行するように設定し、Jobの並列実行を実装しています。
(jobB1の例)
<job order="yes" stop_on_error="no">
<script language="shell">
<![CDATA[
echo %SCHEDULER_JOB_NAME%
]]>
</script>
<run_time />
<commands on_exit_code="success">
<order job_chain="parallel/original/testjob1_chain" replace="yes" id="1" at="now"/>
<order job_chain="parallel/original/testjob2_chain" replace="yes" id="2" at="now"/>
</commands>
</job>
Jobの並列実行が完了した後の待ち合わせにはJobSchedulerSynchronizeJobChainsを使用しています。指定されたJobSchedulerSynchronizeJobChainsが全て実行されるまで、その他のJobSchedulerSynchronizeJobChainsはsuspendして待ちます。
(JobSchedulerSynchronizeJobChainsの例)
<job order="yes">
<description >
<include file="jobs/JobSchedulerSynchronizeJobChains.xml"/>
</description>
<script language="java" java_class_path="" java_class="sos.scheduler.job.JobSchedulerSynchronizeJobChains"/>
<run_time />
</job>