排他制御はどのようにしますか?

「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>