[CentOS6][SOS JobScheduler] <monitor>で動的にパラメータを設定する


Create: 2013/03/19
LastUpdate: 2013/03/27
[ メニューに戻る ]

下図の環境を使用します。
環境の詳細を知りたい場合は、メニューに戻って構築手順を参照してください。


JobScheduler では、ジョブで定義したプログラムの実行前、または実行後に任意のスクリプトを実行することができます。
ここでは、JOB1(上図)に <monitor> を定義して、ジョブの実行前に動的にパラメータ値を設定してみます。
手順については、「Reference Documentation」を参考にしました。
JOB1 では、別サーバ上のファイルを GET する処理を実行し、パラメータでファイル名を設定するようにします。
このファイル名には、処理日の日付(YYYYMMDD 形式)を含むことにして、ジョブを実行するたびにパラメータ値の変更が必要とします。

1.ジョブ(monitorなし)の定義


まずは、<monitor>を使用せず、別サーバからファイルを GET するジョブを定義して動作確認します。
ファイル転送の処理には、JobScheduler が提供するJavaアプリケーションを使用します。
JOEで下図のようにHost-Aで実行するジョブを定義します。
[ClassName]には、"sos.scheduler.ftp.JobSchedulerFTPReceive" を入力します。


下図のようにパラメータを設定します。
  • ftp_protocol ・・・ 転送プロトコル。 ftp/sftp/ftps
  • ftp_host ・・・ ホスト名またはIPアドレス
  • ftp_user ・・・ ユーザ
  • ftp_password ・・・ パスワード
  • ssh_auth_method ・・・ sftpの場合、認証方式を設定
  • ftp_file_path ・・・ ターゲットのファイルパス
  • ftp_local_dir ・・・ ローカルのファイル格納先ディレクトリ


2.ジョブ(mnitorなし)の動作確認


JOCでジョブを  実行 します。実行結果は、下図のとおり


Host-A に、以下のようにGETしたファイルが存在すればOKです。
$ ls -l /home/jobs
合計 12
drwxr-xr-x 3 jobs jobs 4096  3月  5 07:16 2013 sos-berlin.com
-rw-r--r-- 1 jobs jobs   28  3月 19 13:02 2013 test_20130319.dat
drwxrwxr-x 5 jobs jobs 4096  3月 14 13:07 2013 workspace

3.<monitor>の設定


上記で作成したジョブから "ftp_file_path" のパラメータを削除して、<monitor>で設定するようにします。
ここでは、perl スクリプトを使用しますが、perl スクリプトを使用する場合は、環境設定が必要になります。
環境設定の手順は、「 [CentOS6][SOS JobScheduler] Perl アプリケーションのジョブを実行する」を参照してください。
また、perl スクリプトで日付を扱うために、DateTime モジュールを使用します。
Host-A の jobs ユーザで以下のようにコマンドを実行するとインストールできます。
$ sudo yum install perl-DateTime
JOEで<monitor>を設定します。
下図のように、[Pre-/Post-Processing] をクリックし、[New]ボタンをクリックします。


新しく [process0] が作成されるので、それをクリックします。
下図のような画面が表示されたら、[Language]で "perlScript" を選択し、[Script]タブにプログラムを入力します。


上図で入力した、プログラムは以下のとおり。
処理日を取得して、"ftp_file_path" にファイル名をセットしています。
試しに、ファイル名のパスは省略していますが、sos ユーザのホームディレクトリからファイルをGETするはずです。
use DateTime;
use vars qw ($spooler $spooler_log $spooler_job $spooler_task);
sub spooler_task_before {
    $spooler_log->info("start task before");
    my $dt = DateTime->now(time_zone => 'local');
    my $today = $dt->strftime('%Y%m%d');
    $spooler_task->params->set_var('ftp_file_path', "test_$today.dat");
    return 1;
}
$spooler で始まる変数は JobScheduler のAPIです。詳しくは、「Spooler - Application Program Interface (API)」を参照してください。
サブルーチン名にはルールがあり、名称で処理するタイミングが決まります。spooler_task_before であれば、タスクの実行前、spooler_task_after であれば、タスクの後にスクリプトが実行されます。
サーブルーチンの正常終了時は 1 を返し、異常終了時は 0 を返します。

4.<monitor>の動作確認


JOCでジョブを  実行 します。実行結果は、下図のとおり。


"file path" を見ると、<monitor>で設定した値を確認できます。
Host-A でGETしたファイルを見ると以下のとおり。成功です。
$ ls -l
合計 12
drwxr-xr-x 3 jobs jobs 4096  3月  5 07:16 2013 sos-berlin.com
-rw-r--r-- 1 jobs jobs   28  3月 19 14:03 2013 test_20130319.dat
drwxrwxr-x 5 jobs jobs 4096  3月 14 13:07 2013 workspac