連載
» 2013年12月25日 18時00分 UPDATE

OSS「JobScheduler」で実現するこれからの運用自動化(3):排他制御などを活用して複雑なジョブ定義だってOK (1/3)

JobSchedulerの排他制御や待ち合わせ制御などの機能を活用し、現実の業務で必要とされる、ちょっと複雑なジョブ定義の組み方を紹介します。

[船井覚,@IT]

 連載第1回「JobSchedulerの機能と設定〜基礎編」ではJobSchedulerの特徴や主な機能について、第2回の「これからの運用自動化にJobSchedulerを活用する〜基礎編2」では、基本機能を用いた実際の活用例について解説しました。

 それらを踏まえて今回は、JobSchedulerの機能を実現しているアーキテクチャを解説し、複雑なジョブ定義の組み方を紹介します。

JobSchedulerのアーキテクチャ

 JobSchedulerではジョブ管理オブジェクトを、

  • Job
  • Job Chain
  • Order
  • Schedule
  • Process class
  • Lock
  • Event

という単位で管理しており、全ての構成はXMLファイルで管理されています。

jobscheduler03_fig01.gif 図1 JobSchedulerのアーキテクチャ

 構成ファイルは全て「ホットフォルダ」(/home/[user]/sos-berlin.com/jobscheduler/[scheduler ID]/config/live/)に保存され、変更はJobSchedulerを再起動しなくても動的に反映されます。オブジェクトの作成、変更、管理作業は、これまでの回で説明してきた「JOE」(JobScheduler Object Editor)を使用しても行えますし、XMLファイルを直接テキストエディターで編集することも可能です。

 このような構造のおかげで、JobSchedulerでは各オブジェクトは独立して定義可能でありながら、それぞれの関係を継承可能にしています。

 例えば、あるJob Chainオブジェクトで使用したJobオブジェクトは、ジョブ定義はそのままに、他のJob Chainオブジェクトで再利用可能です。ジョブ定義の柔軟性を損なわずに生産性を高めることができます。

 JobSchedulerの特徴的な仕組みに「Order」オブジェクトがあります。前回までの記事で解説したように、Job ChainはOrderによって起動され、Order Jobの実行結果に応じて次に実行するOrder Jobを切り替える、といった設定が可能です。

 Job Chainの制御単位を「Node」と呼びます。NodeはOrder Jobと1対1で対応し、Orderは、実行中のNodeのStateとひも付けられます。

 Nodeが実行するOrder Jobは、異なるJob Chainで共用できますが、環境変数は共用できません。例えば、あるJob Chainを異なるパラメーターで2つ起動したい場合は、Orderを2つ作って、それぞれのOrderに異なるパラメーターを指定することで実現できます。また、Orderには個別に実行スケジュールも指定できます。同時に複数実行することも可能です。

jobcheduler03_fig02.gif 図2 (1)Orderが開始されると……

(1)Orderが開始されるとNodeのOrder Queに投入され、Order Jobが開始されます。Orderは、実行中のNodeのStateとひも付けられます。

 ジョブが完了すると、Nodeであらかじめ定義されたジョブの実行結果であるNext_stateによって、Orderが実行すべき次のステップのNodeが決定されます。Job Chainの最後にはEnd Stateがあります。

jobscheduler03_fig03.gif 図3 (2)Nodeが正常終了すると、Orderはstate2に遷移

(2)上記の例では、OrderのNodeが正常終了すると、Orderはstate2に遷移し、state2でOrdered Job2のNodeが実行されます。もしOrder Job2が異常終了した場合、OrderはerrorというStateに遷移します。

 Orderがくり返し実行されるように設定する場合は、最初のStateに戻り、次の実行タイミングを待ちます。あるNodeで実行したOrder Jobが異常終了した場合、すぐにerror Stateに遷移させずに、リトライ(JobSchedulerでは「Setback」と呼びます)したり、サスペンドさせておくことも可能です。Setbackでは実行回数や待ち時間を設定でき、サスペンドでは、ユーザーがレジューム操作を行うまでJob Chainの実行を停止します。

 複数のJob Chainを束ねたものを「Superordinate Job Chains」と呼びますが、4階層以上のJob Chainは組み込めません。JobSchedulerでは、各Jobの中で複数の実行プログラムを指定して実行を制御できるため、通常ならば3階層以上のJob Chainを作成する必要はないでしょう。

       1|2|3 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。