ジョブフロー(ジョブの実行順序)には、よく使われる基本的なジョブの実行パターンがいくつかあります。このパターンを組み合わせたり、応用することで、複雑な処理をさせることが可能になります。
以下に、代表的なパターンについて説明します。代表的なパターンを参考に、ジョブフローを設計していきます。
ジョブフローのパターン | 概要 | |
---|---|---|
流れ作業型 | 順番どおりに実行する、最も基本的なパターンです。 | |
条件分岐型 | あらかじめ設定した条件に基づいて、フローを分岐させるパターンです。 | |
集中と分岐型 | 複数の先行ジョブの終了を待ち合わせて実行し(AND条件)、その後、複数の後続ジョブに分岐させるパターンです。 | |
待ち合わせ型 | 先行ジョブで複数の起動条件を判定し、そのいずれか1つの条件を満たした場合に(OR条件)、後続ジョブを実行させるパターンです。 | |
階層化 | 別のジョブフローを1つのジョブとして登録し、フローを階層化するパターンです。子ジョブネットにする方法と、リンクジョブネットを利用する方法があります。 | |
リカバリジョブ | あらかじめジョブが異常終了した場合に起動するジョブ(リカバリジョブと呼びます)を登録するパターンです。異常終了した場合、自動的にリカバリジョブが起動されます。 |
最も基本的なジョブネットです。複数のジョブを順序どおりに実行する場合に利用します。
例えば、以下のような場合です。
先行ジョブが正常終了すると、後続のジョブが順に実行されていきます。
分岐の条件を設定し、ジョブフローを別々の処理を行うように切り分ける場合に利用します。
分岐には、以下のような方法があります。
終了コードを利用した分岐
判定ジョブを利用した分岐
終了コードを利用した分岐
先行ジョブが正常終了または疑似正常で終了した場合、先行ジョブの終了コードの値によって、後続ジョブをどのように起動させるか切り分けることができます。ジョブの起動の切分けは起動条件となる終了コードの範囲を、後続ジョブ側で指定します。
以下の例では、バックアップ作業後、終了コード(RC)が10以下のときには、作業ファイルを削除し電源切断、10よりも大きな値のときには、データを一時退避させた後、異常通知を行い電源切断するよう設定されています。
このように、ジョブの実行結果に応じて、異なる作業をさせたいときに便利です。
1つの先行ジョブに対し、複数の後続ジョブを指定することはできますが、後続ジョブ側から見た先行ジョブは1つだけに限ります。1つの先行ジョブに対し、複数の後続ジョブを指定した場合、先行ジョブが正常または疑似正常終了すると、先行ジョブの終了コードにより、条件に当てはまるすべての後続ジョブが起動されます。また、該当するジョブがない場合は、いずれも起動されません。
なお、先行ジョブの終了コードによる後続処理の分岐を行う場合には、先行ジョブが、分岐条件としている終了コードに該当した場合でも異常終了とならないように設定しておく必要があります。詳細については、“4.3.2 ジョブフローの動作”を参照してください。
参考
パス状態について
条件に該当しないために、起動されなかったジョブの状態をパス状態と呼びます。パス状態のジョブが実行されないまま残っていても、パス状態以外のジョブが正常終了した場合、ジョブネットは正常終了となります。
以下のような構成のジョブネット(イメージ図)を例に、先行ジョブの終了コードによって、後続ジョブを切り分けた場合のジョブの動きについて説明します。
ジョブAが終了コード10で正常終了すると、起動条件として10以下が設定されているジョブBが実行されます。ジョブCは、起動条件に当てはまらないためにパス状態になり、ジョブCの正常終了のみを待ち合わせているジョブEも自動的にパス状態となります。これにより、ジョブFはジョブDの正常終了だけを待ち合わせることになります。
ジョブBが正常終了するとジョブDが実行されます。
ジョブDが正常終了するとジョブFが実行されます。
ジョブFが終了コード5で正常終了すると、ジョブGもジョブHも実行条件を満たしていないため、パス状態となり、ジョブIも先行ジョブがすべてパス状態のために同様にパス状態になります。パス状態のジョブが残っていても、ジョブFが正常終了すると、ジョブネットは正常終了します。
判定ジョブを利用した分岐
先行ジョブの実行結果として、想定したファイルが作成されたかなど、先行ジョブの実行結果を判定してから、後続ジョブを切り分けることができます。
判定結果によって後続ジョブを実行分岐させることで、判定条件を満たしたときだけ特定の処理を行う運用ができます。また、判定条件を満たさない場合に異常終了とさせたり、リカバリジョブを利用して復旧させるような運用も可能です。
以下の例では、バックアップの作業後、バックアップファイルが存在するかどうかを、バックアップファイル存在判定ジョブで判定します。
リカバリ処理は、バックアップ存在判定の終了コードが1の場合に実行するよう定義しています。
指定のファイルが存在した場合、リカバリ処理は実行されず電源が切断されます。指定のファイルが存在しなかった場合は、リカバリ処理が実行されます。
このようにジョブの実行結果を判定してから、異なる作業をさせたいときに便利です。
なお、先行ジョブの実行結果を判定するジョブは、以下の判定ジョブになります。
ファイル存在判定ジョブ
ジョブネット変数判定ジョブ
サービス状態確認ジョブ
ログファイル解析ジョブ
スケジュールサーバ上で設定されるジョブネット変数を判定します。ネットワークジョブや分散実行ジョブで実行することはできません。ジョブネットに指定したデフォルトホスト名は、ジョブネット変数判定ジョブでは無視されて、ローカルジョブとして実行されます。
複数の先行ジョブの終了をAND条件で待ち合わせ、複数の後続ジョブへ分岐させるパターンです。別々の箇所からデータを集めてひとつの場所で処理し、その結果を再び別の場所へ配信するときなどに使います。AND条件で待ち合わせた場合、AND条件で待ち合わせる後続ジョブは、すべての先行ジョブの正常終了を待って実行されます。
以下の例では、東京、大阪、名古屋の各サーバから売り上げデータをすべて受信してから、データベースを更新します。その後、各サーバへ更新したデータを送信しています。
複数の先行ジョブをOR条件で待ち合わせて、後続のジョブを実行させることができます。
OR条件での待ち合わせを使うと、先行ジョブで複数の起動条件を判定し、そのいずれか1つの条件が満たされた場合に、後続ジョブが実行されます。
以下の例では、待ち合わせ用の先行ジョブとして、ファイル待ち合わせジョブと時刻待ち合わせジョブが登録されています。
ファイルが更新されるか、指定した時刻になるか、どちらかの条件が成立した場合に、後続のジョブが実行されます。
OR条件で待ち合わせることができる起動条件は、以下になります。
ファイルの作成、削除、更新(ファイルサイズまたは更新時刻)
メッセージ事象の発生
時刻
指定時間の経過
なお、OR条件で待ち合わせる場合の留意事項については、“Systemwalker Operation Manager 運用ガイド”の“OR条件での待ち合わせについて”を参照してください。
ジョブフローの中に、別のジョブネットを登録することができます。これを“ジョブネットの階層化”と呼びます。
別のジョブネットを登録しているジョブネットを“親ジョブネット”、親ジョブネットに登録されているジョブネットを“子ジョブネット”と呼びます。
階層化されているジョブネットにおいて、階層の深さを“第N階層”と表現します。
ジョブネットの階層化には、以下のメリットがあります。
視認性が向上します
適度に階層化することでフローが分かりやすくなり、監視しやすくなります。
ジョブネットを順に起動できます
ジョブフローの様に、前のジョブネットが終了するのを待って、次のジョブネットを起動させることができます。
ジョブ数を少なくできます
子ジョブネットは1つのジョブとして数えられるため、全体のジョブ数を少なくおさえることができます。
以下は、集計処理を行う一連の処理(別のジョブネット)を、子ジョブネットとして登録した例になります。
リンクジョブネットによる階層化
ジョブネットを階層化する場合には、リンクジョブネットによる階層化も可能です。
リンクジョブネットとは、元になる“マスタリンクジョブネット”の定義情報を参照する、マスタリンクジョブネットの複製です。リンクジョブネットは、複数のジョブネットにジョブとして登録できます。
例えば、以下の場合、ジョブネットAとジョブネットBにジョブとして登録されている3つのリンクジョブネットは、すべて同じマスタリンクジョブネットを参照しています。
子ジョブネットの場合は、共通で利用することができません。そのため、複数登録が可能な、共通で使える子ジョブネットが必要な場合には、マスタリンクジョブネットやリンクジョブネットの利用を検討します。
詳細については、“4.4.1 異なるジョブネット間でジョブとして共用できるジョブネットを作成したい場合”を参照してください。
階層化する場合の留意事項
第5階層まで階層化できます。
ジョブネットに登録されている子ジョブネットは1つのジョブとして扱われます。ジョブネット内の子ジョブネットも1ジョブと数え、それを含めて合計255までのジョブが登録できます。
親ジョブネット、子ジョブネットとして登録するためにはいくつかの条件があります。詳細は“Systemwalker Operation Manager 運用ガイド”の“ジョブネットの階層化について”を参照してください。
マスタリンクジョブネットとして登録するためにはいくつかの条件があります。詳細は、“Systemwalker Operation Manager 運用ガイド”の“リンクジョブネットについて”を参照してください。
リカバリジョブとは、操作の途中でエラーなどが起きてジョブが異常終了した場合に起動されるジョブのことです。事前に異常時の対処などを行うジョブとして登録できます。異常終了した場合に、自動的にリカバリジョブが起動されます。
エラーの原因などがある程度特定されていて、対処方法の手順も決まっているときに設定しておけば、自動的に対処することができます。
以下は、売り上げデータベースの更新作業を行っているときにエラーが起きた場合、データベースの復旧プログラムが起動するようにリカバリジョブ“DB復旧”が設定されている例です。
なお、リカバリジョブが正常終了した場合、異常終了した元のジョブを再び起動させることができます。
上記構成のジョブネット(イメージ図)を例に、リカバリジョブの動きについて説明します。
ジョブ“DB更新”が異常終了すると、リカバリジョブ“DB復旧”が実行されます。
リカバリジョブ“DB復旧”が正常終了すると、元のジョブを再起動する指定がある場合に元のジョブ“DB更新”が1回だけ再起動されます。
元のジョブ“DB更新”が正常終了した場合、後続のジョブ“DB停止”が実行されます。
後続ジョブ“DB停止”が正常終了すると、ジョブネットは正常終了します。
なお、以下のいずれかの場合は、ジョブネットは異常終了になります。
リカバリジョブ“DB復旧”が異常終了した
リカバリジョブ“DB復旧”に元のジョブ“DB更新”を再起動する指定がない
リカバリジョブ“DB復旧”に元のジョブ“DB更新”を再起動する指定があるが、リカバリジョブ“DB復旧”が正常終了し、ジョブ“DB更新”が再起動後再び異常終了した
リカバリジョブを利用する場合の留意事項
1つのジョブに接続できるリカバリジョブは1つだけです。
リカバリジョブは、複数の先行ジョブを接続できません。
リカバリジョブの後ろにジョブは接続できません。
OR条件とAND条件の待ち合わせを混在させる場合
OR条件の待ち合わせとAND条件の待ち合わせを混在させたい場合、OR条件で待ち合わせる後続ジョブは何もせずに正常終了するダミーのジョブとし、この後続ジョブとAND条件で待ち合わせたいジョブ(前処理のジョブ)とを先行ジョブとする後続ジョブを作成します。