Create: 2013/03/11
LastUpdate: 2013/03/27
JOBの定義ファイルの格納先
JOEを使用するとGUIでJOBを定義できますが、定義内容はXMLファイルで保存されます。
保存先は、liveフォルダ直下のホットフォルダです。
liveフォルダ: /home/jobs/sos-berlin.com/jobscheduler/scheduler/config/live
JOEを使用せずに、viなどのエディタで、XMLファイルを作成してもジョブを定義できます。
ホットフォルダは、階層を掘りさげて作成してもOKです。
例えば、test という名称のホットフォルダが以下のような階層の場合、
$ tree -F /home/jobs/sos-berlin.com/jobscheduler/scheduler/config/live/test /home/jobs/sos-berlin.com/jobscheduler/scheduler/config/live/test ├── Host-A.process_class.xml ├── Host-B.process_class.xml ├── error_job.job.xml ├── event_job.job.xml ├── event_monitor_job.job.xml ├── job1.job.xml ├── job3.job.xml ├── job_chain01.config.xml ├── job_chain01.job_chain.xml ├── sample1/ │ └── shell_job.job.xml ├── sample2/ ├── sample3/ └── test_lock.lock.xmlJOC では、下図のように見ることができます。
JobChainなどの定義で、別フォルダのジョブを指定する場合は、liveフォルダをルートとしたフルパスで指定します。(赤枠を参照)
JOBの定義例
Unixにインストールした JobScheduler では、Unixで実行可能なプログラムであればジョブから実行できるようです。
Javascript については、JobSchedulerが実行環境(spidermonkey)を実装しているようです。
詳しくは、「Reference Documentation」または、「Example Job Scheduling Solutions」を参照してください。
以下にいくつか、ジョブの定義例をXMLで紹介します。
<script>の要素としてコマンドを組み込む例
<job name="simple_shell"> <script language="shell"><![CDATA[ echo hello world call my_script.sh my_prog.sh ]]></script> </job>シェルスクリプトのファイルを <include> で指定する例
<job name="simple_command"> <script language="shell"> <include file="my_script.sh"/> </script> </job><process>で Perlプログラムのファイルを指定する例
<job name="simple_job"> <process file="my_prog.pl"/> </job><process>で php コマンドを指定し、そのパラメータで php のスクリプトファイルを指定する例
<job name="interpreter_job"> <process file="/usr/bin/php" param="-f '/home/jobs/phpinfo.php'"/> </job>
JOBにJobSchedulerの内部APIを実装
Javascript、Java、Perl 、VBScript(Windowsのみ)などを使用する場合は、プログラムに JobScheduler の内部APIを実装することができます。
内部APIを実装すると、以下のオブジェクト変数が使用できるようになります。
詳しくは、「Reference Documentation」または、「Internal API-Jobs(PDF)」を参照してください。
- spooler: 基本情報
- spooler_log: ログ情報
- spooler_job: ジョブ情報
- spooler_task: タスク情報
- spooler_init: コンストラクタ。spooler_open()より前に一回だけ呼び出されます。
- spooler_open: タスク開始時に呼び出されます。
- spooler_process: ジョブステップまたはOrder処理時に呼び出される。StandaloneJobとOrderJobでは少し違いあり。
- spooler_close: タスク終了時に呼び出されます。
- spooler_on_success: 正常終了時に呼び出されます。
- spooler_on_error: 異常終了時に呼び出されます。
- spooler_exit: デストラクタ。スクリプトがアンロードされる前に最後のメソッドとして呼び出されます。
StandaloneJob で Javascript を使用した場合の内部APIの実装例は以下のとおりです。
<?xml version="1.0" encoding="ISO-8859-1"?> <job > <params> <param name="param1" value="value of param1" /> </params> <script language="javascript"> <![CDATA[ spooler_log.info("** " + spooler_job.name + " is RUNNING."); var cnt; function spooler_init() { cnt = 0; spooler_log.info( "*** spooler_init called" ); return true; } function spooler_open() { spooler_log.info( "*** spooler_open called" ); return true; } function spooler_close() { spooler_log.info( "*** spooler_close called" ); return true; } function spooler_process() { if (cnt < 5) { spooler_log.info( "*** spooler_process called (" + ++cnt + ") times." ); var params = getParameter(); if (params != null) { var names = params.names().split(";"); for (var i in names) { spooler_log.info ("**** Parameter: " + names[i] + " = " + params.value(names[i])); } // create an additional parameter spooler_task.params.set_var ("p" + cnt.toString(), "Value of parameter " + cnt.toString()); } spooler_log.info("-----------------------------------------------"); return true; // continue run, continue with next call to process } return false; // end run, continue process with exit and close } function spooler_on_success() { spooler_log.info("*** spooler_on_success called"); return true; } function spooler_exit() { spooler_log.info("*** spooler_exit called"); return false; } function spooler_on_error() { spooler_log.error("*** error during job-run: " + spooler_task.error); return true; } function getParameter () { var params = spooler.create_variable_set(); var taskParams = spooler_task.params; if (taskParams != null) { params.merge(taskParams); } var order = spooler_task.order; if (order != null) { // to avoid TypeError: "order has no properties in line 31, column 1," params.merge(order.params); } return params; } ]]> </script> <run_time /> </job>このジョブを実行すると以下のようになります。
2013-03-26 09:05:16.169 [info] SCHEDULER-918 state=starting (at=2013-03-26 09:05:16.099) 2013-03-26 09:05:16.190 [info] ** test/js_job is RUNNING. 2013-03-26 09:05:16.191 [info] *** spooler_init called 2013-03-26 09:05:16.197 [info] *** spooler_open called 2013-03-26 09:05:16.198 [info] *** spooler_process called (1) times. 2013-03-26 09:05:16.199 [info] **** Parameter: param1 = value of param1 2013-03-26 09:05:16.199 [info] ----------------------------------------------- 2013-03-26 09:05:16.200 [info] *** spooler_process called (2) times. 2013-03-26 09:05:16.202 [info] **** Parameter: p1 = Value of parameter 1 2013-03-26 09:05:16.202 [info] **** Parameter: param1 = value of param1 2013-03-26 09:05:16.202 [info] ----------------------------------------------- 2013-03-26 09:05:16.203 [info] *** spooler_process called (3) times. 2013-03-26 09:05:16.204 [info] **** Parameter: p1 = Value of parameter 1 2013-03-26 09:05:16.205 [info] **** Parameter: p2 = Value of parameter 2 2013-03-26 09:05:16.205 [info] **** Parameter: param1 = value of param1 2013-03-26 09:05:16.205 [info] ----------------------------------------------- 2013-03-26 09:05:16.206 [info] *** spooler_process called (4) times. 2013-03-26 09:05:16.207 [info] **** Parameter: p1 = Value of parameter 1 2013-03-26 09:05:16.208 [info] **** Parameter: p2 = Value of parameter 2 2013-03-26 09:05:16.208 [info] **** Parameter: p3 = Value of parameter 3 2013-03-26 09:05:16.208 [info] **** Parameter: param1 = value of param1 2013-03-26 09:05:16.209 [info] ----------------------------------------------- 2013-03-26 09:05:16.210 [info] *** spooler_process called (5) times. 2013-03-26 09:05:16.211 [info] **** Parameter: p1 = Value of parameter 1 2013-03-26 09:05:16.211 [info] **** Parameter: p2 = Value of parameter 2 2013-03-26 09:05:16.211 [info] **** Parameter: p3 = Value of parameter 3 2013-03-26 09:05:16.212 [info] **** Parameter: p4 = Value of parameter 4 2013-03-26 09:05:16.212 [info] **** Parameter: param1 = value of param1 2013-03-26 09:05:16.213 [info] ----------------------------------------------- 2013-03-26 09:05:16.214 [info] *** spooler_close called 2013-03-26 09:05:16.214 [info] *** spooler_on_success called 2013-03-26 09:05:16.215 [info] *** spooler_exit called
JOBの実行ステータス
ジョブは、以下の実行ステータスを持ちます。ジョブのステータスはJOCなどで見ることができます。
pending | 全くタスクが実行されていません。開始状態 |
running | 少なくとも1つのタスクが実行されています。 |
stopping | ジョブが停止しています。Job Schedulerは、別のタスクを起動せず、現在のすべてのタスクが停止されています。すぐに、すべてのタスクをstoppedするには、ジョブのステータスを stopped に変更します。 |
stopped | 全くタスクが実行されていない。また、Job Schedulerによって開始される作業もない。 |
read_error | 再読込みコマンドは、エラーの原因となっており、プログラム·コードをファイルから読み取ることができない。ジョブを使用できません。 |
error | エラーが発生した。JobSchedulerは、新しいタスクを開始しません。 |