2回は引き続きJobSchedulerの機能について解説した上で、基本機能を用いて、複数サーバにまたがって順序性を持たせたジョブを制御する方法を紹介します。
連載第1回「JobSchedulerの機能と設定〜基礎編」では、JobSchedulerの特徴やアーキテクチャ、活用場面が多いであろう機能について解説しました。第2回は引き続きJobSchedulerの機能について解説した上で、基本機能を用いた実際の活用例について紹介します。
APIには、ジョブ内からJobSchedulerを操作するために用意されている「内部API」と外部連携のために用意されている「外部API」の2種類があります。それぞれのAPIについて解説します。
・内部API
JobSchedulerの内部APIを用いると、ジョブ内でJobSchedulerに対してさまざまな操作を実行できます。例えば、ジョブ内で動的にジョブ定義を生成し、JobSchedulerに登録したり、ジョブ内で別のジョブを指定して即時実行するなど、GUIで操作できることはほぼすべて、内部APIを使用して実現できます。
ただし、内部APIを使う際には注意点があります。動的にジョブやスケジュールなどの定義を追加した場合、Engine自体を停止すると内部APIを用いて動的に定義追加した情報は消えてしまうのです。一時的に定義を追加したい場合は内部APIを使って定義してもよいのですが、恒久的に定義を追加したい場合はホットフォルダ内にジョブを定義する必要があります。内部APIに対応している言語は下記のとおりです。
今回はこの中からJavaとPerlで、JobSchedulerの内部APIを用いて自分のホスト名をログに情報を出力した後、特定ジョブを即時実行する例を解説します。
// print my hostname spooler_log.info(‘My hostname is ' + spooler.hostname()); // kick next job spooler.job(‘path/to/job').start();
# print my hostname $spooler_log->info('My hostname is ' . $spooler->hostname); # kick next job $spooler->job('path/to/job')->start();
上記のように、各言語でそれぞれ内部APIを用いてJobSchedulerを操作できます。APIの詳細についてはSOS社の公式サイトをご参照ください。
※注:Javaで内部APIを使用する際にはJavaのクラスを作成し、JobSchedulerのAPI用パッケージをインポートしてAPIを使用します。JobSchedulerでジョブとして稼働させる際には、作成したJavaファイルをコンパイルした後にjarファイルに圧縮し、ジョブ定義でjarファイルを指定する必要があります。
・外部API
外部から特定URLに対してWebAPIを用いることで、JobSchedulerを操作できます。Web APIを用いると、ジョブ定義の動的追加や指定ジョブの即時実行といった操作を、外部からJobSchedulerに対して実施できます。外部APIも内部API同様、動的に定義情報を追加するため、注意が必要です。
Web APIを用いた外部連携はすべて、XML形式のコマンドを使用します。使用可能なXML形式のコマンドはJobSchedulerの公式サイトに記載されています。
例えば、localhostのポート4444にインストールされたJobScheudlerの特定ジョブを実行するには、下記のようなURLにアクセスします。
http://localhost:4444/<start_job job="path/to/job"/>
※必要に応じて「<」を「%3C」に、「>」を「%3E」にエスケープする必要があります。
JobSchedulerからのレスポンスは、リクエストと同様にXML形式で返ってきます。ブラウザからアクセスした場合、JobSchedulerの状態を示すXMLがレスポンスとしてブラウザの画面に表示されます。
なお、執筆時点の最新版(1.5.3192)では、ユーザーとパスワードを設定することでBasic認証を有効にできます。ただし、WebAPIでの認証はできないため、外部APIを使用する際には認証を無効にする必要があります。
また、SOS社からWebAPIをラッピングするPHPのライブラリが提供されています。このライブラリを用いると、独自に開発した画面とJobSchedulerとの連携が非常に容易に実現できます。PHPライブラリについては連載の最終回で別途解説する予定です。
ここまで紹介した例では、JOEを用いてジョブ定義やスケジュール定義を作成しましたが、これらの実態はすべてXMLファイルとして管理されています。例えば、前述の例で作成したジョブ定義は、以下のようなXMLファイルとなっています。
<?xml version="1.0" encoding="ISO-8859-1"?> <job title="job_title" process_class="agent" name="job_name"> <script language="shell"> <![CDATA[ #! /bin/sh echo 'please configure script in this area' ]]> </script> <run_time > <period single_start="10:00"/> </run_time> </job>
各記述の内容は以下の通りです。
・jobタグ
ジョブ定義の基本となるタグ。jobタグ内にジョブの詳細を定義します。
・scriptタグ
ジョブがどの言語でどのようなスクリプトであるかを定義します。CDATA内に実際に実行するスクリプトを定義します。
・run_timeタグ
ジョブの実行スケジュールを定義します。
上記の例のように、JobSchedulerではすべてのジョブに関連する定義がXMLファイルで記述されているため、subversionやgitなどの構成管理ツールを用いてジョブ関連定義を管理できるメリットがあります。
Copyright © ITmedia, Inc. All Rights Reserved.