最後に基礎編のまとめとして、複数サーバにまたがって順序性を持たせたジョブの制御方法を紹介しましょう。これをJobSchedulerで実現するには下記の定義を用います。
・Process Classes定義
前述の通り、ジョブを稼働させるホストなどを定義。
・Order Job定義
実行するジョブの実態を定義。
・Job Chain定義
Order Jobの順序関係などを定義。各Order Jobを実行した際に正常終了/エラー終了を判断し、後続で実行するジョブを分岐する。
・Order定義
Job Chainを実行させるための命令を定義。Job Chainを実行するには、必ずOrderを発行する必要がある。
これらの定義を用いて下図のジョブ構成の実装方法について解説します。
各ホストにEngineおよびAgentをインストールした後、まずは実行対象ホストごとにProcess Classesを定義します。定義方法については、前述の「実行エージェントの設定」と同様に実施してください。例では、各Process Classesに定義した名前(Process Class)はそれぞれのホスト名(agent1/agent2/agent3)と同一名とします。
Order JobはJOEでNew Order Jobを選択して作成すること以外は、Standalone Jobと同様に定義可能です。JOEで作成されたXMLファイルを確認してみると、Standalone Jobに比べ、jobタグ内に「order="yes"」が含まれていることが分かります。
<job order="yes" stop_on_error="no" process_class="agent1" title="agent1">
この定義以外、Standalone JobとOrder Jobの内容は同一です。例では各Order Job(job1/job2/job3)に、実行したいホストのProcess Class(agent1/agent2/agent3)をそれぞれ割り当て、各ジョブ内容は稼働ホスト名を表示する設定とします。
定義した各Order Jobの実行順序をJob Chainに定義します。Job Chainでは各Stateに対してOrder Jobを定義し、Order Jobが正常終了した際に後続で実行するStateと、エラーが発生した際に後続で実行するStateを定義します。Job Chainでは最後に遷移するStateは必ずEnd Nodeである必要があります(図1では「Error Node」と「Success Node」がEnd Nodeに当たります)。
JOEでは、下図のように定義できます。
■表1 Job Chainでの設定パラメータ
設定パラメータ | 説明 |
---|---|
State | 1つのJob Chain内で順序制御をする際に判別する一意な名前を設定 |
Job | 実行対象Order Jobを設定 |
Next State | 実行したOrder Jobが正常終了だった場合の遷移先State名を設定 |
Delay | Next Stateで設定されたOrder Jobを実行する前に待機する時間(秒)を設定 |
Error State | 実行したOrder Jobがエラー終了だった場合の遷移先State名を設定 |
On Error | エラーが発生した場合の挙動を設定 Suspend:後続Stateに定義されたOrder Jobを実行せずに処理を停止させる Setback:ジョブ定義のSetBackで設定された定義に従い、ジョブを再実行した後、Error Stateに定義されたStateに遷移する |
Full Node | Order Jobを定義する場合に設定 |
End Node | End Nodeを定義する場合に設定 |
File Sink | ファイル監視によるState遷移を定義する場合に設定 ※ファイル監視は特定ディレクトリ内の正規表現で指定したファイルを監視し、変更などがあった場合に指定したStateに遷移する機能です。ここでは、設定方法などの詳細は省略します。 |
Job Chainを実行させるためのOrderを定義します。OrderにはID、対象のJob Chain名、開始と終了のStateなどを定義します。また、Orderの中で実行するJob Chainに与えたい外部パラメータや実行スケジュール(Run Time)を定義することもできます。
■表2 Orderでの設定パラメータ
設定パラメータ | 説明 |
---|---|
Order ID | 特定のJob Chainを実行するOrderを一意に判別するためのIDを設定 |
Job Chain | 実行対象のJob Chainを設定 |
Title | Orderのタイトルを設定 |
Priority | Orderの優先度を設定。複数Orderを同時稼働させた場合に、高い数値のOrderが優先して実行される |
State | Orderを発行した際に最初に実行されるJob ChainのStateを設定 |
End State | 実行したらOrderが終了となるJob ChainのStateを設定 |
最下部にあるStateおよびParameterボタン | Job Chainの各State単位、もしくはJob Chain全体に与えたい外部パラメータを設定 |
JOCのOrdersタブより、設定したOrderを右クリックで選択し、「Start order now」を選択します。すると設定したOrderが発行され、対象のJob Chainが実行されます。Jobsタブより実行された各Order Jobを確認すると、Process Classにて設定したホストで稼働したことが確認できます。
このような方法によって、JobSchedulerを用い、複数サーバにまたがって順序性を持たせたジョブを実行させることができます。今回の例ではJobChainを手動で実行しましたが、Orderにスケジュールを定義すれば、指定した時間に自動的にJob Chainを実行させることも可能です。
第1回でも触れましたが、バッチジョブはコンピュータというものが生まれた当初から重要な処理形態であり、それは今日も変わっていません。ジョブの運用自動化は今なお、ITシステムの運用効率化において重要な役割を担っています。ここまで説明したように、JobSchedulerを用いればそのジョブ運用を自動化し、さまざまなメリットを享受できます。
第1回目と第2回目ではJobSchedulerの基礎的な部分と基本的な使い方について解説しました。次回はJobSchedulerの特徴的な機能をより詳細に解説し、複雑なジョブの制御方法や付属ツール群などを紹介します。
秋穂賢
TIS株式会社 戦略技術センター所属。入社後4年間、メインフレームを用いた大規模基幹システムのシステム管理業務に従事。その後OSSの世界に飛び込み、推奨OSSミドルウェアスタック「ISHIGAKI Template」の開発に従事。OSSの活動の一環でJobSchedulerと出会い、日本JobSchedulerユーザ会の立ち上げに携わる。戦略技術センターでは、技術情報をブログ『Tech-Sketch』にて発信中。
Copyright © ITmedia, Inc. All Rights Reserved.