[CentOS6][SOS JobScheduler] ConfigrationMonitor でパラメータ設定を1箇所にまとめる2


Create: 2014/10/08
LastUpdate: 2014/10/08
[ メニューに戻る ]

[CentOS6][SOS JobScheduler] ConfigrationMonitor でパラメータ設定を1箇所にまとめる1 」の続きです。
ConfigrationMonitor を使うと、いろんな方法でパラメータを指定することができます。
以下のJobSchedulerFAQ、HowTO を参考にしました。
動作確認は、JobScheduler1.7 で実施しています。

JobChain の定義


テスト用に、以下のような jobchain01.job_chain.xml を定義します。
ジョブを2つ実行するだけの単純なものです。
<?xml version="1.0" encoding="ISO-8859-1"?>
<job_chain title="JobChain01">
    <job_chain_node  state="JobChainStart" job="/sos/jitl/JobChainStart" next_state="100" error_state="!error"/>
    <job_chain_node  state="100" job="job02" next_state="200" error_state="!error"/>
    <job_chain_node  state="200" job="job02" next_state="JobChainEnd" error_state="!error"/>
    <job_chain_node  state="JobChainEnd" job="/sos/jitl/JobChainEnd" next_state="FINISH" error_state="!error"/>
    <job_chain_node  state="FINISH"/>
    <job_chain_node  state="!error"/> 
    </job_chain>

グローバルなパラメータの定義


すべての JobChain と Job で参照できるようなグローバルなパラメータを定義します。
まず、config ディレクトリの scheduler.xml にグローバルパラメータを定義するファイルを設定します。
<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="scheduler_documentation.xsl" ?>
<spooler>
      <config mail_xslt_stylesheet = "config/scheduler_mail.xsl"
                      port = "4444">
           <params>
                <param name="scheduler.variable_name_prefix" value="SCHEDULER_PARAM_"/>
                <param name="scheduler.order.keep_order_content_on_reschedule" value="false"/>
                <param name="global_configuration_params" value="config/scheduler_global_vars.xml"/>
           </params>
           <security ignore_unknown_hosts = "yes">
                <allowed_host host = "localhost" level = "all"/>
                <allowed_host host = "0.0.0.0" level = "all"/>
           </security>
~省略~
この例では、config ディレクトリの scheduler_global_vars.xml にグローバルなパラメータを定義します。
今回は、テスト用に、以下の4つのパラメータを定義します。
<?xml version="1.0" encoding="iso-8859-1"?>
<spooler>
  <config>
    <params>
      <param name="G_P1" value="GLOBAL-P001"/>
      <param name="G_P2" value="GLOBAL-P002"/>
      <param name="G_P3" value="GLOBAL-P003"/>
      <param name="G_P4" value="GLOBAL-P004"/>
    </params>
  </config>
</spooler>

あとは、scheduler.xml の設定変更を有効にするために、JobScheduler を再起動します。
scheduler_global_vars.xml を変更しても JobScheduler を再起動する必要はありません。
グローバルパラメータの値を参照する場合は、${パラメータ名}とするか、内部APIを使用します。

ジョブのパラメータ定義


job02.job.xml は、以下のように定義します。
テスト用にパラメータを2つ定義します。
"job_p1" には、グローバルパラメータの "G_P1" の値を代入します。(後で確認しますが、ここではグローバルパラメータを参照できません)
"job_p2" には、固定値を設定します。
<?xml version="1.0" encoding="ISO-8859-1"?>
<job order="yes" title="shell job02">
    <params>
        <param name="job_p1" value="${G_P1}"/>
        <param name="job_p2" value="JOB-P002"/>
    </params>
    <script language="shell">
        <![CDATA[
echo "----------------------------------------------------------"
echo "$SCHEDULER_JOB_NAME processed $SCHEDULER_ORDER_ID"
echo "Current Timestamp: `date '+%Y-%m-%d %H:%M:%S'`"
echo "Current Hostname: `uname -n`"
echo "Current Username: `whoami`"
echo "----------------------------------------------------------"
env | sort
exit 0
        ]]>
    </script>
    <monitor name="configuration_monitor" ordering="0">
        <script java_class="sos.scheduler.managed.configuration.ConfigurationOrderMonitor" language="java"/>
    </monitor>
    <run_time />
</job>

このジョブを実行すると環境変数を表示します。
環境変数を見ることで、パラメータを確認することができます。
なお、グローバルパラメータなど、外部ファイルのパラメータを参照するには、<monitor>の定義は、必須です。

JobChainのパラメータ定義


jobchain01.config.xml で以下のようにパラメータを定義します。
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="scheduler_configuration_documentation.xsl"?>
<settings>
  <job_chain name="jobchain01">
   <order>
     <params>
       <param name="param1"    value="10"/>
       <param name="param2"    value="20"/>
     </params>
     <process state="100">
       <params>
         <param name="param3"  value="abc"/>
         <param name="param4"  value="${param2}-${G_P1}"/>
       </params>
     </process>
     <process state="200">
       <params>
         <param name="param2"  value="xyz"/>
         <param name="param4"  value="${param2}-${G_P2}"/>
       </params>
     </process>
   </order>
  </job_chain>
</settings>

<order> に定義した "param1" と "param2" は、jobchain01 で実行する全ジョブに共通のパラメータになります。
<process state="100"> に定義した "param3" と "param4" は、 state=100 で実行するジョブに渡すパラメータになります。param4 の値には、param2 で設定した値と、グローバルパラメータの G_P1 の値を代入しています。
<process state="200"> に定義した "param2" と "param4" は、 state=200 で実行するジョブに渡すパラメータになります。param2 は、<order>でも定義していますが、ここで設定した値が優先します。param4 の値には、ここで設定した param2 の値と、グローバルパラメータの G_P2 の値を代入しています。

Orderのパラメータ定義


jobchain01 の OrderID を my_order として実行する場合のOrderのパラメータを jobchain01,my_order.order.xml に定義します。
パラメータは以下のようにします。
<?xml version="1.0" encoding="ISO-8859-1"?>
<order >
    <params >
        <param  name="100/job_p9" value="100-${job_p2}-${order_p1}-${G_P1}"/>
        <param  name="200/job_p9" value="200"/>
        <param  name="order_p1" value="ORDER-P001"/>
    </params>
    <run_time />
</order>
<param>の name に "ステート名/パラメータ名" を設定すると、特定のジョブに特定のパラメータを定義することができます。
<param name="100/job_p9"> では、jobchain01 の ステート(100)で実行するジョブに job_p9 というパラメータ名で値を設定します。job_p9 には、ジョブで定義したパラメータの job_p2 と オーダーで定義したパラメータの order_p1 、グローバルパラメータの G_P1 の値を代入します。
<param name="200/job_p9"> では、jobchain01 の ステート(200)で実行するジョブに job_p9 というパラメータ名で固定値を設定します

動作確認


上記の設定を JOC で見ると下図のとおり。


my_order を実行してパラメータがどのように設定されているか結果を見てみます。
state="100" のジョブに渡されたパラメータは以下のとおり。
SCHEDULER_PARAM_JOB_P1 には値が設定されていないので、ジョブ定義ではグローバルパラメータを参照できないようです。
Order と JobChainの config で定義したパラメータは、全部参照できています。


state="200" のジョブに渡されたパラメータは以下のとおり