2.1.2 自動化する処理(実行ファイルや順番)について検討する
自動化したい業務で,どの部分が自動化できる処理なのか,という検討が終了したら,自動化する処理の実現方式について検討します。検討項目と作業の流れを次の図に示します。
図2-2 自動化する処理の検討
![[図データ]](figure/zud02020.gif)
- <この項の構成>
- (1) 自動化を実現する実行ファイルの検討
- (2) 処理を実行する順番や優先順位の検討
- (3) 処理がうまくいかなかったときの対処の検討
- (4) 打ち切り時間の検討
(1) 自動化を実現する実行ファイルの検討
JP1/AJS2で業務を自動化するには,実行ファイルを使用します。JP1/AJS2で定義できる実行ファイルを次の表に示します。
表2-1 JP1/AJS2で定義できる実行ファイル
実行場所 | 定義できる実行ファイル |
---|
Windowsホストで処理を実行させる場合 | ・.exeファイル |
・.comファイル |
・.cmdファイル |
・バッチファイル(.bat) |
・JP1/Scriptで作成したスクリプトファイル(.spt) |
・アプリケーションに関連づけられているファイルタイプ(拡張子)を持つデータファイル |
UNIXホストで処理を実行させる場合 | ・シェルスクリプト |
・実行ファイル |
(a) 実行ファイル検討時のヒント
- 画面やメッセージで応答が発生しない処理にする
- JP1/AJS2で実行する実行ファイルは,バックグラウンドで実行されます。そのため,実行ファイルの作成時には,画面やメッセージが表示されて入力待ちにならない処理にすることを検討してください。
- ただし,画面やメッセージが表示されても,自動的に処理が実行されるように定義されている場合は,処理として実行できます。例えば,[はい]ボタンが表示される画面で,自動的に[はい]を選択してそのあとの処理が実行される処理については,JP1/AJS2で実行できます。
- 実行ファイルのリターンコードを出力する処理にする
- 実行ファイルの処理結果が正常終了なのか異常終了なのかは,実行ファイルのリターンコードによってJP1/AJS2が判定します。そのため,処理結果に応じたリターンコードが出力されるように設定しておいてください。
- バッチファイルの場合は,jp1exitコマンドやjp1execコマンドを使用して,バッチファイル内の実行プログラムの処理結果に応じたリターンコードが出力されるようにしてください。jp1exitコマンドやjp1execコマンドの詳細については,マニュアル「JP1/Automatic Job Management System 2 コマンドリファレンス 1. コマンド」を参照してください。
- シェルスクリプトの場合は,次に示す例を参考にして,処理結果に応じたリターンコードが出力されるようにしてください。
- (例)
- 出力されるリターンコードは,どの範囲を警告終了または異常終了として扱うか,というしきい値を決めておいてください。
- なお,コマンドが異常終了した場合は,原因を分析できるように,要因となったリターンコードがそのまま出力されるようにしてください。
- 一つの実行ファイルには一つの命令を定義する
- 一つの実行ファイルには,一つの命令を定義することをお勧めします。処理を分けていると,どの処理までが正常に終了しているのか,またはどの処理がうまくいかなかったなどがわかります。例えば,ファイルをコピーするコマンドを使用して三つのファイルをコピーする場合,三つに分けていれば,どのファイルのコピーが成功または失敗したかがわかります。
- また,途中で異常終了した処理を再実行するとき,異常終了した処理から,または異常終了した処理だけを再実行することができます(正常終了した処理を再実行する必要がなくなります)。処理を分けていないと,複数の処理の先頭から再実行することになります。
- ループの時間が短い処理にする
- 一つの処理の実行時間があまり長くなると,JP1/AJS2がトラブルで止まっているのか,それとも実行中なのか,わからなくなるおそれがあります。目安として,一つの処理の実行時間は2時間程度までにしてください。
- 処理を実行したいホストに実行ファイルを保存する
- 処理として定義する実行ファイル(コマンドやバッチファイルなど)は,後述するシステム構成などの検討を踏まえて,処理を実行したい実行先ホストに保存してください。
- 命名規則などを決定する
- 実行ファイル名や,実行ファイルを格納するフォルダおよびディレクトリのルールを決めておくことをお勧めします。また,JP1/AJS2で使用する業務や処理などの命名ルールも合わせて決めておくと,業務全体を管理しやすくなります。例えば,業務名,処理名,処理サイクル,実行場所などを意味する識別子を決めておくのが有効です。
- JP1/AJS2で使用する業務や処理の名称には,半角英数字,全角文字,および次の記号を使用できます。
! # $ % + @ -(ハイフン) .(ピリオド) _(アンダーバー) |
- ただし,記号は,UNIXのシェルなどのコマンドインタープリターで特別な意味を持つ場合があり,業務や処理の名称に記号を使うと誤動作することがあるので,できるだけ使わないようにしてください。
- なお,業務や処理の名称の先頭に,.(ピリオド)および@は使用しないでください。また,機種依存文字は使用しないでください。
(b) バッチファイルまたはシェルスクリプト作成時のヒント
- ファイル内で使用する入出力ファイル名やコマンド名は,ディレクトリまで含めて指定してください。
- 異常終了時の原因を調査しやすくするために,echoコマンドなどを使用して,任意のメッセージを標準エラー出力に出力させてください。原因,対処方法,業務名,再実行のポイントなどを表示させておくと便利です。出力されたメッセージは,[実行結果詳細]ダイアログボックスという画面で参照することができます。[実行結果詳細]ダイアログボックスの詳細については,マニュアル「JP1/Automatic Job Management System 2 操作ガイド 13.3.26 [実行結果詳細]ダイアログボックス」を参照してください。
- 環境変数を使用する場合,原則として実行ファイルに環境変数を定義してください。
- シェルスクリプトの場合,使用するシェルをファイルの先頭で宣言してください。
(2) 処理を実行する順番や優先順位の検討
実行ファイルの検討の終了後,自動化する処理の意味や優先順位を考慮して,処理を実行させる順番や優先順位を検討してください。
処理の前後関係の流れや階層を図にしておくと,実際に処理を定義する場合に便利です。
なお,処理を実行する順番を検討したあと,検討した内容を,JP1/AJS2 - Definition Assistantでユニットを一括して定義できます。JP1/AJS2 - Definition Assistantは,JP1/AJS2のユニットを定義する作業を支援する製品です。JP1/AJS2 - Definition Assistantの詳細については,マニュアル「JP1/Automatic Job Management System 2 - Definition Assistant」を参照してください。
また,実行ファイルを実行したときに起動するプロセスの優先順位を設定できます。処理を優先させ,できるだけ早く終了させたい実行ファイルがある場合など,運用に応じて優先順位の変更が必要かどうかを検討してください。詳細については,「8.1.17 ジョブの実行優先順位に関する注意事項」を参照してください。
(3) 処理がうまくいかなかったときの対処の検討
実行ファイルや順番の検討が終了したら,処理がうまくいかなかった場合の対処もあらかじめ検討してください。検討するポイントは次の二つです。
- 異常終了した処理の後処理を自動的に実行させる処理
- 同じ処理を再実行する場合の方法
JP1/AJS2は,実行ファイルのリターンコードで処理が正常終了したか,または異常終了したかを判定します。そのため,異常終了を意味するリターンコードが出力されたときだけ,後処理を自動的に実行させることができます。
例えば,システム管理者に異常終了したことを連絡するメールを送信する処理を実行したり,更新しようとしたファイルが破損しないように保存する処理を実行したりできます。
また,同じ処理を再実行する場合は,業務全体を再実行するのか,それとも業務の一部分を再実行するのかなどを検討しておいてください。業務全体を再実行する場合のポイントを次の図に示します。
図2-3 業務全体の再実行ポイント
![[図データ]](figure/zud02030.gif)
部分的に再実行する場合は,異常終了した処理をもう一度実行させるのかや,異常終了した処理の次の処理から実行させるのかなどを検討しておいてください。
なお,どちらの再実行方法にも,一時的に保留状態にしてから再実行ができます。保留状態にしておくと,保留を解除するまで実行されないので,実行予定を一時的に変更したり,中止したりできます。
(4) 打ち切り時間の検討
自動化する処理の検討時には,運用形態に応じて,その処理の実行を打ち切る時間も検討してください。何らかの原因で処理の実行が終了しない場合を想定して,打ち切る時間を検討しておきます。
処理の実行を打ち切ることで,原因を調査したり,システム管理者に異常を通知する処理や,異常終了した場合にだけ実行する処理を実行させたりすることができます。