[CentOS6][SOS JobScheduler] 複数のJobChain 並列に実行し、複数の同期ポイントを設定する


Create: 2014/09/19
LastUpdate: 2014/09/20
[ メニューに戻る ]

Jobscheduler FAQの「Synchronisation of Job Chains」のサンプルを動かしたのですが、「同期」が、ちゃんと動きませんでした。
そこで、Jobscheduler FAQを参考にして、自分で作ってみました。
「同期」の設定は、正しい方法かどうかわかりませんが、一応、意図したとおりに動いてます。
また、デバッグ用にトレースログを出力するようにしたので、あわせて紹介します。
動作確認した JobScheduler のバージョンは、1.7 です。

ジョブフロー


今回は下図のシナリオで流れるジョブを定義します。各ボックスが、ジョブに対応し、ボックスの名称は、JobChainのstateになります。
赤、青、緑で色分けした3つの JobChain と、この3つを並列起動する黒の JobChain を1つ作成します。
黄色のボックスが同期ポイントです。


今回作成したファイルは、以下のとおり。上図の各ボックスの名称とファイル名は同じにしてます。
JobChainStart、JobChainEnd、split_job*(JobChainSplitter) は、/sos/jitl のジョブを使用するので、ここには含みません。
# tree ./live/test
├── JobChain01.config.xml ・・・・・・・・・・ JobChain01用の設定ファイル
├── JobChain01.job_chain.xml ・・・・・・・・ JobChain01(赤)
├── JobChain02.config.xml ・・・・・・・・・・ JobChain02用の設定ファイル
├── JobChain02.job_chain.xml ・・・・・・・・ JobChain02(青)
├── JobChain03.config.xml ・・・・・・・・・・ JobChain03用の設定ファイル
├── JobChain03.job_chain.xml ・・・・・・・ JobChain03(緑)
├── StartJobChain01.job.xml ・・・・・・・・ JobChain01 起動ジョブ
├── StartJobChain02.job.xml ・・・・・・・・ JobChain02 起動ジョブ
├── StartJobChain03.job.xml ・・・・・・・・ JobChain03 起動ジョブ
├── StartTest.job_chain.xml ・・・・・・・・・ JobChain01、JobChain02、JobChain03 を起動する
├── debug.pl ・・・・・・・・・・・・・・・・・・・・・ デバッグ用にジョブの開始、終了メッセージをログに出力する
├── debug.sh ・・・・・・・・・・・・・・・・・・・・ デバッグ用にシェルのトレースログを出力する
├── job01a-1.job.xml ・・・・・・・・・・・・・・ テストジョブ
├── job01a-2.job.xml ・・・・・・・・・・・・・・ テストジョブ
├── job01a.job.xml ・・・・・・・・・・・・・・・・ テストジョブ
├── job01b.job.xml ・・・・・・・・・・・・・・・・ テストジョブ
├── job01c.job.xml ・・・・・・・・・・・・・・・・ テストジョブ
├── job02a-1.job.xml ・・・・・・・・・・・・・・ テストジョブ
├── job02a-2.job.xml ・・・・・・・・・・・・・・ テストジョブ
├── job02a-3.job.xml ・・・・・・・・・・・・・・ テストジョブ
├── job02a.job.xml ・・・・・・・・・・・・・・・・ テストジョブ
├── job02b.job.xml ・・・・・・・・・・・・・・・・ テストジョブ
├── job03.job.xml ・・・・・・・・・・・・・・・・・ テストジョブ
├── sync_job01a.job.xml ・・・・・・・・・・・ 同期ジョブ(JobChain01内部用)
├── sync_job02a.job.xml ・・・・・・・・・・・ 同期ジョブ(JobChain02内部用)
├── sync_jobchain12.job.xml ・・・・・・・ 同期ジョブ(JobChain01、JobChain02同期用)
└── sync_jobchain123.job.xml ・・・・・・ 同期ジョブ(JobChain01、JobChain02、JobChain03同期用)

JobChain01


JobChain01.job_chain.xml の内容は以下のとおり。[JobChain01-02]、[JobChain01-02-03] との同期ポイントがあります。
JobChainSplitter でジョブを並列実行します。使い方は、「 [CentOS6][SOS JobScheduler] JITLを使ってJobChainのジョブを並列実行する」を参照してください。
<?xml version="1.0" encoding="ISO-8859-1"?>
<job_chain title="JobChain01">
    <job_chain_node  state="JobChainStart" job="/sos/jitl/JobChainStart" next_state="job01a" error_state="!error"/>
    <job_chain_node  state="job01a" job="job01a" next_state="split_job01a" error_state="!error"/>
    <job_chain_node  state="split_job01a" job="/sos/jitl/JobChainSplitter" next_state="sync_job01a" error_state="!error"/>
    <job_chain_node  state="split_job01a:job01a-1" job="job01a-1" next_state="sync_job01a" error_state="!error"/>
    <job_chain_node  state="split_job01a:sync_jobchain12" job="sync_jobchain12" next_state="job01a-2" error_state="!error"/>
    <job_chain_node  state="job01a-2" job="job01a-2" next_state="sync_job01a" error_state="!error"/>
    <job_chain_node  state="sync_job01a" job="sync_job01a" next_state="job01b" error_state="!error"/>
    <job_chain_node  state="job01b" job="job01b" next_state="sync_jobchain123" error_state="!error"/>
    <job_chain_node  state="sync_jobchain123" job="sync_jobchain123" next_state="job01c" error_state="!error"/>
    <job_chain_node  state="job01c" job="job01c" 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>

JobChainSplitter、sync_jobchain12、sync_jobchain123 に渡すパラメータを、JobChain01.config.xml に定義しています。
sync_jobchain12、sync_jobchain123に設定しているパラメータは、JobScheduler FAQ とは異なりますが、とりあえず、動いてます。
"sync_session_id" の使い方が、いまいち、わかっていません。
<?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/>
            <process state="split_job01a">
                <params>
                    <param name="state_names" value="split_job01a:job01a-1;split_job01a:sync_jobchain12"/>
                    <param name="sync_state_name" value="sync_job01a"/>
                </params>
            </process>
            <process state="split_job01a:sync_jobchain12">
                <params>
                  <param name="sync_session_id" value="sync12"/>
                  <param name="job_chain_state2synchronize" value=""/>
                  <param name="job_chain_name2synchronize" value=""/>
                  <param name="sync_state_name" value=""/>
                  <param name="state_names" value=""/>
                </params>
            </process>
            <process state="sync_jobchain123">
                <params>
                  <param name="job_chain_state2synchronize" value=""/>
                  <param name="job_chain_name2synchronize" value=""/>
                  <param name="sync_state_name" value=""/>
                  <param name="state_names" value=""/>
                </params>
            </process>
        </order>
    </job_chain>
</settings>

JobChain02


JobChain02.job_chain.xml の内容は以下のとおり。[JobChain01-02]、[JobChain01-02-03] との同期ポイントがあります。
<?xml version="1.0" encoding="ISO-8859-1"?>
<job_chain title="JobChain02">
    <job_chain_node  state="JobChainStart" job="/sos/jitl/JobChainStart" next_state="job02a" error_state="!error"/>
    <job_chain_node  state="job02a" job="job02a" next_state="split_job02a" error_state="!error"/>
    <job_chain_node  state="split_job02a" job="/sos/jitl/JobChainSplitter" next_state="sync_job02a" error_state="!error"/>
    <job_chain_node  state="split_job02a:job02a-1" job="job02a-1" next_state="sync_jobchain12" error_state="!error"/>
    <job_chain_node  state="sync_jobchain12" job="sync_jobchain12" next_state="job02a-3" error_state="!error"/>
    <job_chain_node  state="job02a-3" job="job02a-3" next_state="sync_job02a" error_state="!error"/>
    <job_chain_node  state="split_job02a:job02a-2" job="job02a-2" next_state="sync_job02a" error_state="!error"/>
    <job_chain_node  state="sync_job02a" job="sync_job02a" next_state="sync_jobchain123" error_state="!error"/>
    <job_chain_node  state="sync_jobchain123" job="sync_jobchain123" next_state="job02b" error_state="!error"/>
    <job_chain_node  state="job02b" job="job02b" 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>

JobChainSplitter、sync_jobchain12、sync_jobchain123 に渡すパラメータを、JobChain02.config.xml に定義しています。
sync_jobchain12、sync_jobchain123に設定しているパラメータは、JobScheduler FAQ とは異なりますが、とりあえず、動いてます。
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="scheduler_configuration_documentation.xsl"?>
<settings>
    <job_chain name="JobChain02">
        <order>
            <params/>
            <process state="split_job02a">
                <params>
                    <param name="state_names" value="split_job02a:job02a-1;split_job02a:job02a-2"/>
                    <param name="sync_state_name" value="sync_job02a"/>
                </params>
            </process>
            <process state="sync_jobchain12">
                <params>
                  <param name="sync_session_id" value="sync12"/>
                  <param name="job_chain_state2synchronize" value=""/>
                  <param name="job_chain_name2synchronize" value=""/>
                  <param name="sync_state_name" value=""/>
                  <param name="state_names" value=""/>
                </params>
            </process>
            <process state="sync_jobchain123">
                <params>
                  <param name="job_chain_state2synchronize" value=""/>
                  <param name="job_chain_name2synchronize" value=""/>
                  <param name="sync_state_name" value=""/>
                  <param name="state_names" value=""/>
                </params>
            </process>
        </order>
    </job_chain>
</settings>

JobChain03


JobChain03.job_chain.xml の内容は以下のとおり。[JobChain01-02-03] との同期ポイントがあります。
<?xml version="1.0" encoding="ISO-8859-1"?>
<job_chain title="JobChain03">
    <job_chain_node  state="JobChainStart" job="/sos/jitl/JobChainStart" next_state="sync_jobchain123" error_state="!error"/>
    <job_chain_node  state="sync_jobchain123" job="sync_jobchain123" next_state="job03" error_state="!error"/>
    <job_chain_node  state="job03" job="job03" 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>

無くてもいいのですが、一応、JobChain03.config.xml を作成しています。
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="scheduler_configuration_documentation.xsl"?>
<settings>
    <job_chain name="JobChain03">
        <order>
            <params/>
        </order>
    </job_chain>
</settings>

StartTest


StartTest.job_chain.xml の内容は以下のとおり。各stateで JobChain01、JobChain02、JobChain03 を起動するだけで、各stateで起動した JobChainが終了するまで待機はしません。このJobChainを実行すると JobChain01、JobChain02、JobChain03 を並列実行します。
<?xml version="1.0" encoding="ISO-8859-1"?>
<job_chain title="StartTest">
    <job_chain_node  state="JobChainStart" job="/sos/jitl/JobChainStart" next_state="StartJobChain01" error_state="!error"/>
    <job_chain_node  state="StartJobChain01" job="StartJobChain01" next_state="StartJobChain02" error_state="!error"/>
    <job_chain_node  state="StartJobChain02" job="StartJobChain02" next_state="StartJobChain03" error_state="!error"/>
    <job_chain_node  state="StartJobChain03" job="StartJobChain03" 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>

StartJobChain* ジョブの内容は、以下のとおり。スクリプトが正常終了したら、Order を作成することで JobChain を起動してます。
Order を作成したら、ジョブは終了します。
なお、JOC や、後述のデバッグログで見やすくするために、OrderID を固定にしています。
  • JobChain01 ⇒ "jc001"
  • JobChain02 ⇒ "jc002"
  • JobChain03 ⇒ "jc003"
<?xml version="1.0" encoding="ISO-8859-1"?>
<job order="yes">
    <params />
    <script  language="shell">
        <![CDATA[
echo "========== Generate Order for JobChain01 =========="
exit 0
        ]]>
    </script>
    <run_time />
    <commands  on_exit_code="error"/>
    <commands  on_exit_code="success">
        <add_order job_chain="/test/JobChain01" id="jc001">
            <params />
        </add_order>
    </commands>
</job>

テストジョブ


JobChain01、JobChain02、JobChain03 で実行するジョブの内容は以下のとおり。
"debug.sh" は、シェルのトレースログをジョブ単位に作成します。
"debug.pl" は、ジョブの開始/終了時にデバッグログにメッセージを出力します。
<?xml version="1.0" encoding="ISO-8859-1"?>
<job order="yes">
    <script  language="shell">
        <![CDATA[
. ./config/live/test/debug.sh
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`"
exit 0
        ]]>
    </script>
    <monitor name="process0" ordering="0">
        <script language="perl">
          <include file="./config/live/test/debug.pl"/>
        </script>
    </monitor>
    <run_time />
</job>

debug.sh の内容は以下のとおり。
JobSchedulerは、/bin/sh でスクリプトを実行するので、bash に切り替えてから、環境変数とシェルのトレースログを/tmp/debug/<ジョブ名>.log に追記します。
ジョブの実行間隔を長くして動きをじっくりみたい場合は、コメントアウトしている sleep を生かします。
#---------------------------
# BASH に切り替え
/bin/bash
# for DEBUG
TRACE_LOG=${TRACE_LOG-/tmp/debug/${SCHEDULER_JOB_NAME}.log}
exec 3>>$TRACE_LOG
BASH_XTRACEFD=3
echo "*************************************************" >>  $TRACE_LOG
env >> $TRACE_LOG
echo "*************************************************" >>  $TRACE_LOG
set -xe
#sleep 10
#---------------------------

debug.pl の内容は以下のとおり。perl の内部APIを使用しています。
各ジョブの 実行時刻、START/END、JOB名、ORDER-ID を /tmp/debug/debug.log に追記します。
my $LOG = "/tmp/debug/debug.log";
sub spooler_task_before {
    my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
    my $order = $spooler_task->order();
    my $order_id = ( defined($order) ? $order->id : "none" );
    open(OUT,">>$LOG");
    printf(OUT "%04d-%02d-%02d %02d:%02d:%02d - START - JOB=%s - ORDER_ID=%s\n",
         ($year+1900), ($mon+1), $mday, $hour, $min, $sec, $spooler_job->name, $order_id);
    close(OUT);
}
sub spooler_task_after {
    my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
    my $order = $spooler_task->order();
    my $order_id = ( defined($order) ? $order->id : "none" );
    open(OUT,">>$LOG");
    printf(OUT "%04d-%02d-%02d %02d:%02d:%02d - END   - JOB=%s - ORDER_ID=%s\n",
         ($year+1900), ($mon+1), $mday, $hour, $min, $sec, $spooler_job->name, $order_id);
    close(OUT);
}
 

同期ジョブ


JobChainSplitter で平行稼働したジョブの同期に使用する sync_job01a、sync_job02a の内容は以下のとおり。
デバッグ用に詳細なログを出力するように<log_level>を設定しています。 "debug.pl" については前述の「テストジョブ」参照
<?xml version="1.0" encoding="ISO-8859-1"?>
<job order="yes" stop_on_error="no" tasks="1">
    <settings >
        <log_level ><![CDATA[debug9]]></log_level>
    </settings>
    <params />
    <script  language="java" java_class="com.sos.jitl.sync.JobSchedulerSynchronizeJobChainsJSAdapterClass"/>
    <monitor name="process0" ordering="0">
        <script language="perl">
          <include file="./config/live/test/debug.pl"/>
        </script>
    </monitor>
    <run_time />
</job>
JobChain の同期に使用する sync_jobchain12、sync_jobchain123 の内容は以下のとおり。
デバッグ用に詳細なログを出力するように<log_level>を設定しています。 "debug.pl" については前述の「テストジョブ」参照
<script>で使用している java_class が、「 [CentOS6][SOS JobScheduler] JobChainの同期」で紹介した、java_class とは異なりますが、使い方は同じようです。(違いがわからない)
<?xml version="1.0" encoding="ISO-8859-1"?>
<job order="yes" stop_on_error="no" tasks="1">
    <settings>
        <log_level><![CDATA[debug9]]></log_level>
    </settings>
    <description>
        <include file="jobs/JobSchedulerSynchronizeJobChains.xml"/>
    </description>
    <script language="java" java_class="com.sos.jitl.sync.JobSchedulerSynchronizeJobChainsJSAdapterClass"/>
    <monitor name="configuration_monitor" ordering="0">
        <script java_class="sos.scheduler.managed.configuration.ConfigurationOrderMonitor" language="java"/>
    </monitor>
    <monitor name="process0" ordering="0">
        <script language="perl">
          <include file="./config/live/test/debug.pl"/>
        </script>
    </monitor>
    <run_time />
</job>

動作確認


ジョブなどのファイル一式は、liveディレクトリ直下の test ディレクトリに格納します。
  • <JOB_SCHEDULER_BASE>/config/live/test
デバッグ用ファイルの出力先ディレクトリを作成します。
$ mkdir /tmp/debug
$ chmod 777 /tmp/debug
ブラウザでJOC を開いて、StartTest を実行します。
StartTest を右クリックして、メニューから [AddOrder] を選択します。
[show jobs]と[show orders] はチェックしておいたほうが、ジョブの動きがわかりやすいです。


下図のポップアップ画面が表示されたら、[submit] ボタンをクリックします。


下図は、実行中の状況です。
JobChain01は、ジョブを並列実行中で、ちょうど、JobChain01とJobChain02 の同期ポイントを実行しています。
JobChain02も、ジョブを並列実行中ですが、まだ、JobChain01とJobChain02 の同期ポイントまで流れていません。
JobChain03 は、JobChain01、JobChain02、JobChain03 の同期ポイントでサスペンド中で、JobChain01、JobChain02 を待ってます。


上記の実行中に、tail コマンドでデバッグログ(debug.log) を見ると、ジョブの実行順序を以下のように監視できます。
ただし、初回は、debug.log が存在しないので tail する場合は、"touch debug.log" で空ファイルを作成しておきます。
$ tail -f debug.log
2014-09-19 11:22:41 - START - JOB=test/job01a - ORDER_ID=jc001
2014-09-19 11:22:41 - END   - JOB=test/job01a - ORDER_ID=jc001
2014-09-19 11:22:44 - START - JOB=test/sync_jobchain123 - ORDER_ID=jc003
2014-09-19 11:22:48 - START - JOB=test/job01a-1 - ORDER_ID=jc001_split_job01a:job01a-1
2014-09-19 11:22:48 - END   - JOB=test/job01a-1 - ORDER_ID=jc001_split_job01a:job01a-1
2014-09-19 11:22:48 - START - JOB=test/sync_jobchain12 - ORDER_ID=jc001_split_job01a:sync_jobchain12
2014-09-19 11:22:48 - START - JOB=test/sync_job01a - ORDER_ID=jc001
2014-09-19 11:22:48 - START - JOB=test/job02a - ORDER_ID=jc002
2014-09-19 11:22:48 - END   - JOB=test/job02a - ORDER_ID=jc002
2014-09-19 11:22:51 - END   - JOB=test/sync_jobchain123 - ORDER_ID=none
2014-09-19 11:22:53 - START - JOB=test/job02a-1 - ORDER_ID=jc002_split_job02a:job02a-1
2014-09-19 11:22:53 - START - JOB=test/job02a-2 - ORDER_ID=jc002_split_job02a:job02a-2
2014-09-19 11:22:53 - START - JOB=test/sync_job02a - ORDER_ID=jc002
2014-09-19 11:22:53 - END   - JOB=test/job02a-1 - ORDER_ID=jc002_split_job02a:job02a-1
2014-09-19 11:22:53 - END   - JOB=test/job02a-2 - ORDER_ID=jc002_split_job02a:job02a-2
2014-09-19 11:22:57 - START - JOB=test/job01a-2 - ORDER_ID=jc001_split_job01a:sync_jobchain12
2014-09-19 11:22:57 - END   - JOB=test/job01a-2 - ORDER_ID=jc001_split_job01a:sync_jobchain12
2014-09-19 11:22:57 - START - JOB=test/job02a-3 - ORDER_ID=jc002_split_job02a:job02a-1
2014-09-19 11:22:57 - END   - JOB=test/job02a-3 - ORDER_ID=jc002_split_job02a:job02a-1
2014-09-19 11:22:59 - START - JOB=test/job01b - ORDER_ID=jc001
2014-09-19 11:22:59 - END   - JOB=test/job01b - ORDER_ID=jc001
2014-09-19 11:23:00 - END   - JOB=test/sync_jobchain12 - ORDER_ID=none
2014-09-19 11:23:00 - START - JOB=test/sync_jobchain123 - ORDER_ID=jc002
2014-09-19 11:23:03 - END   - JOB=test/sync_job01a - ORDER_ID=none
2014-09-19 11:23:03 - START - JOB=test/job02b - ORDER_ID=jc002
2014-09-19 11:23:03 - END   - JOB=test/job02b - ORDER_ID=jc002
2014-09-19 11:23:04 - END   - JOB=test/sync_job02a - ORDER_ID=none
2014-09-19 11:23:04 - START - JOB=test/job03 - ORDER_ID=jc003
2014-09-19 11:23:04 - END   - JOB=test/job03 - ORDER_ID=jc003
2014-09-19 11:23:04 - START - JOB=test/job01c - ORDER_ID=jc001
2014-09-19 11:23:04 - END   - JOB=test/job01c - ORDER_ID=jc001
2014-09-19 11:23:07 - END   - JOB=test/sync_jobchain123 - ORDER_ID=none

テストジョブ(シェル)のトレースログファイルは以下のとおり。
$ ls /tmp/debug
debug.log     job01a-2.log  job01b.log  job02a-1.log  job02a-3.log  job02b.log
job01a-1.log  job01a.log    job01c.log  job02a-2.log  job02a.log    job03.log
$ cat /tmp/debug/job01a-1.log
*************************************************
SCHEDULER_JOB_CONFIGURATION_DIRECTORY=/home/jobs/sos-berlin.com/jobscheduler/centos6_4444/config/live/test
SCHEDULER_HOST=centos6
HOSTNAME=centos6
SCHEDULER_JOB_NAME=job01a-1
SCHEDULER_UDP_PORT=4444
SCHEDULER_PARAM_JOBCHAIN01,SYNC_JOB01A_REQUIRED_ORDERS=3
SCHEDULER_SUPERVISOR_HOST=
SHELL=/bin/bash
TERM=xterm
SCHEDULER_PARAM_CONFIGURATIONBASEMONITOR.CONFIGURATION_FILE=/home/jobs/sos-berlin.com/jobscheduler/centos6_4444/config/live/test/JobChain01.config.xml
HISTSIZE=1000
SCHEDULER_PARAM_SYNC_SESSION_ID=JobChain01_sync_job01a_jc001
SCHEDULER_JOB_CHAIN_CONFIGURATION_DIRECTORY=/home/jobs/sos-berlin.com/jobscheduler/centos6_4444/config/live/test
USER=jobs
SCHEDULER_PARAM_JOB_CHAIN_STATE2SYNCHRONIZE=sync_job01a
SOS_INI=/home/jobs/sos-berlin.com/jobscheduler/centos6_4444/config/sos.ini
LD_LIBRARY_PATH=/opt/sos-berlin.com/jobscheduler/centos6_4444/lib:/usr/local/lib:/usr/java/jdk1.7.0_13/jre/lib/i386:/usr/java/jdk1.7.0_13/jre/lib/i386/client:/usr/java/jdk1.7.0_13/jre/jre/lib/i386:/usr/java/jdk1.7.0_13/jre/jre/lib/i386/client:
SCHEDULER_DATA=/home/jobs/sos-berlin.com/jobscheduler/centos6_4444
SCHEDULER_JOB_CHAIN=JobChain01
SCHEDULER_PARAM_JOB_CHAIN_NAME2SYNCHRONIZE=/test/JobChain01
SCHEDULER_ORDER_ID=jc001_split_job01a:job01a-1
NLSPATH=/usr/dt/lib/nls/msg/%L/%N.cat
SCHEDULER_CONFIGURATION_DIRECTORY=/home/jobs/sos-berlin.com/jobscheduler/centos6_4444/config/live
MAIL=/var/spool/mail/jobs
PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/jobs/bin
PWD=/home/jobs/sos-berlin.com/jobscheduler/centos6_4444
SCHEDULER_RETURN_VALUES=/tmp/jobs/sos.A4NhU8
JAVA_HOME=/usr/java/jdk1.7.0_13/jre
SCHEDULER_HOME=/opt/sos-berlin.com/jobscheduler/centos6_4444
SCHEDULER_PARAM_SYNC_STATE_NAME=sync_job01a
LANG=ja_JP.UTF-8
XFILESEARCHPATH=/usr/dt/app-defaults/%L/Dt
__scheduler_socket=217
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
HISTCONTROL=ignoredups
SCHEDULER_TASK_ID=5093
SCHEDULER_TCP_PORT=4444
SHLVL=3
HOME=/home/jobs
SCHEDULER_SUPERVISOR_PORT=
SCHEDULER_USER=jobs
LOGNAME=jobs
SCHEDULER_PARAM_STATE_NAMES=split_job01a:job01a-1;split_job01a:sync_jobchain12
LESSOPEN=|/usr/bin/lesspipe.sh %s
SCHEDULER_TASK_TRIGGER_FILES=
DISPLAY=127.0.0.1:0.0
SCHEDULER_PARAM_CONFIGURATIONBASEMONITOR.SCHEDULER_ORDER_CONFIGURATION_LOADED=true
G_BROKEN_FILENAMES=1
_=/bin/env
*************************************************
++ echo 'job01a-1 processed jc001_split_job01a:job01a-1'
+++ date '+%Y-%m-%d %H:%M:%S'
++ echo 'Current Timestamp: 2014-09-19 11:22:48'
+++ uname -n
++ echo 'Current Hostname: centos6'
+++ whoami
++ echo 'Current Username: jobs'
++ exit 0


テストジョグのログを JOC で見ると以下のとおり。シェルのトレースは出力されません。
2014-09-19 11:22:45.087+0900 [info]   
2014-09-19 11:22:45.087+0900 [info]   Task test/job01a-1:5093 - Protocol starts in /home/jobs/sos-berlin.com/jobscheduler/centos6_4444/logs/task.test,job01a-1.log
2014-09-19 11:22:45.086+0900 [info]   SCHEDULER-842  Task is going to process Order test/JobChain01:jc001_split_job01a:job01a-1 ": split_job01a:job01a-1", state=split_job01a:job01a-1, on JobScheduler http://centos6:4444
2014-09-19 11:22:45.116+0900 [info]   SCHEDULER-918  state=starting (at=never)
2014-09-19 11:22:48.240+0900 [info]   SCHEDULER-987  Starting process: '/bin/sh' '-c' '"/tmp/jobs/sos.eSSuFR"'
2014-09-19 11:22:48.363+0900 [info]   job01a-1 processed jc001_split_job01a:job01a-1
2014-09-19 11:22:48.363+0900 [info]   Current Timestamp: 2014-09-19 11:22:48
2014-09-19 11:22:48.363+0900 [info]   Current Hostname: centos6
2014-09-19 11:22:48.363+0900 [info]   Current Username: jobs
2014-09-19 11:22:48.477+0900 [info]   SCHEDULER-843  Task has ended processing of Order test/JobChain01:jc001_split_job01a:job01a-1 ": split_job01a:job01a-1", state=split_job01a:job01a-1, on JobScheduler http://centos6:4444