排他制御はどのようにしますか?
「lock」を使えばJobSchedulerで排他制御をすることが出来ます。「lock」については下記ページで詳しく紹介されています。
http://www.sos-berlin.com/doc/en/scheduler.doc/lock.xml (※英語)
「lock」はホットフォルダ内にxmlファイルとして定義します。ファイル名は「.lock.xml」とします。(例:lockSample.lock.xml)
排他制御で「locks」を使う為には下記を実施する必要があります。
1. 「lock」のxmlファイルを定義する
2. 排他制御をしたいJobに対して定義したlocksを割り当てる
サンプル
添付ファイル「locks」を使えば排他制御のJobを稼動させることが出来ます。
サンプルは2つのオーダージョブ(jobsSample_1・jobsSample_2)が同時に稼動しないように排他制御をかけたジョブを用意しています。
サンプルの使い方
・添付ファイル「locks」をダウンロードし、インストールしたJobSchedulerの{SCHEDULER_HOME}/config/live以下に解凍します。
・(オプション)サンプルJob(jobsSample_1, jobsSample_2)のスクリプトを好きなようにカスタマイズします。
・JOCのJobsタブを開き、sample/locks/add_orderを右クリックする
・「Start task immediately」をクリックする
・jobsSample_1とjobsSample_2に対して排他制御がかかっている為、同時にJobは実行されない
サンプルのジョブ定義
・lock定義
各ジョブに割当てるlock定義です。
<?xml version="1.0" encoding="ISO-8859-1"?>
<lock />
・lockを定義したオーダージョブ
排他制御をする対象のジョブ定義です。
jobsSample_1.job.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<job order="yes" stop_on_error="no">
<lock.use lock="lockSample" exclusive="yes"/>
<script language="shell">
<![CDATA[
echo here is the job jobsSample_1
echo I'm not running in parallel with job jobsSample_2
ping -n 10 localhost
]]>
</script>
<run_time />
</job>
jobsSample_2.job.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<job order="yes" stop_on_error="no">
<lock.use lock="lockSample" exclusive="yes"/>
<script language="shell">
<![CDATA[
echo here is the job jobsSample_2
echo I'm not running in parallel with job jobsSample_1
ping -n 10 localhost
]]>
</script>
<run_time />
</job>
・オーダージョブが含まれるジョブチェイン
排他制御をするジョブが含まれるジョブチェインの定義です。
job_chain1.job_chain.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<job_chain orders_recoverable="yes" visible="yes">
<job_chain_node state="100" job="jobsSample_1" next_state="success" error_state="error"/>
<job_chain_node state="success"/>
<job_chain_node state="error"/>
</job_chain>
job_chain2.job_chain.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<job_chain orders_recoverable="yes" visible="yes">
<job_chain_node state="100" job="jobsSample_2" next_state="success" error_state="error"/>
<job_chain_node state="success"/>
<job_chain_node state="error"/>
</job_chain>
・ジョブチェインを稼動させるオーダーを発行するジョブ
サンプルのジョブチェインを稼動させる為のオーダーを発行するジョブです。サンプルでは2つのジョブに対して排他制御をかける為、2つのジョブチェインを同時に稼動させる為
のオーダーを発行するジョブを用意しています。
add_order.job.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<job >
<script language="javascript">
<![CDATA[
{
var order = spooler.create_order();
order.id = 1234;
spooler.job_chain( "sample/locks/job_chain1" ).add_order( order );
}
{
var order = spooler.create_order();
order.id = 2345;
spooler.job_chain( "sample/locks/job_chain2" ).add_order( order );
}
]]>
</script>
<run_time />
</job>