SOS JobSchedulerをXMLやPHPから操作する

SOS JobSchedulerを他のシステムと統合したいと思うことがあります。例えば、既存システムからジョブをキックするとか、ジョブの実行状況をNagiosやZabbixといった監視システムから取得するといったことです。

そうした場合でも、JobSchedulerなら安心です。TCP通信でXMLのコマンドを投げると、結果を返してくれるようになっているのです。また、TCP通信でのXMLのやりとりをラッピングしたPHPライブラリも提供されています。

Telnetで通信してみよう!

例えば、/test/job_chain1というジョブチェーンがあるとして、それをTelnetから実行してみましょう。

telnet localhost 4444 →localhostにJobSchedulerがインストールされているとする
Trying localhost…
Connected to localhost.
Escape character is '^]'.

JobSchedulerとTelnet(TCP)での会話が出来るようになりました。
ここで、以下のXMLを送信してみましょう。

<add_order job_chain="/test/job_chain1" at="now" />

すると、JobSchedulerからこんな回答が返ってきます。

<?xml version="1.0" encoding="ISO-8859-1"?>
<spooler>
  <answer time="2013-01-15 20:31:00.540">
    <ok>
      <order path="/" order="2" id="2" state="step-1" initial_state="step-1" job_chain="/test/job_chain1" job="/test/job1" priority="0" created="2013-01-15 20:31:00.543">
        <file_based state="not_initialized">
          <requisites/>
        </file_based>
      </order>
    </ok>
  </answer>
</spooler>

ほほう!

JOC(JobScheduler Operation Centre)を見てみると・・・

Joc order history 01

たしかに実行されているようです。

PHPでJobSchedulerを操る

上記のようにTCPでXMLを送信するとJobSchedulerを操作できますから、あとはお好きなプログラム言語でソケットプログラミングすればOKということになります。
SOS社では、PHPでのAPIライブラリを提供しています。

上記ページの説明どおり、package_scheduler.zipとpackage_class.zipをそれぞれダウンロード→展開して、次のようなコードを書いてみましょう。

$launcher = new SOS_Scheduler_OrderCommand_Launcher(
    'localhost',    //アドレス
    4444,   //ポート
    30  //タイムアウト
);

$order = $launcher->add_order(’/test/job_chain1', null);
$order->replace = 'yes';
$order->id = 1; //任意のジョブオーダーID

//パラメータの指定(パラメータが必要な場合)
$order->addParam($key, $value);

//実行時間の指定
$order->at('now');

$launcher->execute($order);

エラー制御とかは一切していないコードですが、これで先ほど説明したTCPでXMLを投げた場合と同じことが出来ます。

この記事を書いた人

井上 研一

株式会社ビビンコ代表取締役、ITエンジニア/経済産業省推進資格ITコーディネータ。AI・IoTに強いITコーディネータとして活動。画像認識モデルを活用したアプリや、生成AIを業務に組み込むためのサービス「Gen2Go」の開発などを行っている。近著に「使ってわかった AWSのAI」、「ワトソンで体感する人工知能」。日本全国でセミナー・研修講師としての登壇も多数。