排他制御などを活用して複雑なジョブ定義だってOK:OSS「JobScheduler」で実現するこれからの運用自動化(3)(1/3 ページ)
JobSchedulerの排他制御や待ち合わせ制御などの機能を活用し、現実の業務で必要とされる、ちょっと複雑なジョブ定義の組み方を紹介します。
連載第1回「JobSchedulerの機能と設定〜基礎編」ではJobSchedulerの特徴や主な機能について、第2回の「これからの運用自動化にJobSchedulerを活用する〜基礎編2」では、基本機能を用いた実際の活用例について解説しました。
それらを踏まえて今回は、JobSchedulerの機能を実現しているアーキテクチャを解説し、複雑なジョブ定義の組み方を紹介します。
JobSchedulerのアーキテクチャ
JobSchedulerではジョブ管理オブジェクトを、
- Job
- Job Chain
- Order
- Schedule
- Process class
- Lock
- Event
という単位で管理しており、全ての構成はXMLファイルで管理されています。
構成ファイルは全て「ホットフォルダ」(/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には個別に実行スケジュールも指定できます。同時に複数実行することも可能です。
(1)Orderが開始されるとNodeのOrder Queに投入され、Order Jobが開始されます。Orderは、実行中のNodeのStateとひも付けられます。
ジョブが完了すると、Nodeであらかじめ定義されたジョブの実行結果であるNext_stateによって、Orderが実行すべき次のステップのNodeが決定されます。Job Chainの最後にはEnd Stateがあります。
(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を作成する必要はないでしょう。
Copyright © ITmedia, Inc. All Rights Reserved.