Create: 2014/10/08
LastUpdate: 2014/10/08
「 [CentOS6][SOS JobScheduler] ConfigrationMonitor でパラメータ設定を1箇所にまとめる1 」の続きです。
ConfigrationMonitor を使うと、いろんな方法でパラメータを指定することができます。
以下のJobSchedulerFAQ、HowTO を参考にしました。
- JobScheduler HowTO - Configration Monotor
- JobScheduler FAQ - Defining Node parameters in the configuration of the order
- JobScheduler FAQ - Creating global variables
- JobScheduler FAQ - Substituting global variables
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" のジョブに渡されたパラメータは以下のとおり