バックグラウンドジョブは、対話操作を伴わずに処理を実行する仕組みです。夜間バッチ、定期的なデータ連携、長時間かかる集計処理などに使われます。
なぜバックグラウンド処理が必要か
- ダイアログ処理には実行時間の上限がある(既定600秒)
- 大量データの処理は、業務時間外に実行するほうがシステム負荷を分散できる
- 定期的な処理を人手を介さず自動実行できる
- 処理の実行履歴とログが残る
ジョブの構成
ジョブは、SM36で定義します。1つのジョブは、複数のステップから構成できます。
| 要素 | 内容 |
|---|---|
| ジョブ名 | 識別名。命名規約を決めておくと管理しやすい |
| ジョブクラス | A(高)、B(中)、C(低)。優先度 |
| ステップ | 実行するプログラムまたは外部コマンド |
| バリアント | プログラムに渡す選択条件 |
| 開始条件 | いつ実行するか |
| ターゲットサーバ | どのインスタンスで実行するか |
開始条件の種類
| 条件 | 内容 | 用途 |
|---|---|---|
| 日時指定 | 指定した日時に実行 | 毎日深夜の定期処理 |
| 即時 | すぐに実行 | 手動での長時間処理 |
| 先行ジョブ | 指定したジョブの終了後に実行 | 処理順序の制御 |
| イベント | イベントが発生したら実行 | 外部システムからの起動 |
| オペレーションモード | モード切替時に実行 | 運用モードの変更に連動 |
先行ジョブによる連鎖は、依存関係のある処理を確実に順序どおり実行するために使います。「在庫更新が終わってから集計を実行する」といった制御が可能です。
バリアント
バリアントは、プログラムの選択画面に入力する値を保存したものです。バックグラウンド実行では画面入力ができないため、バリアントが必須になります。
ジョブの監視
SM37で、ジョブの実行状況を確認します。ステータスによって状態が分かります。
| ステータス | 意味 |
|---|---|
| 計画済 | ジョブは定義されたが開始条件が未設定 |
| 解放済 | 開始条件が設定され、実行待ち |
| 準備完了 | 実行の直前 |
| 実行中 | 処理中 |
| 完了 | 正常終了 |
| 取消 | 異常終了。ログの確認が必要 |
ジョブが実行されない原因
| 原因 | 確認方法 |
|---|---|
| バックグラウンドプロセスが不足 | SM50でBTCプロセスの空きを確認 |
| ジョブがリリースされていない | SM37でステータスを確認 |
| 実行ユーザーの権限不足 | SM37のジョブログを確認 |
| 実行ユーザーがロックされている | SU01でユーザーの状態を確認 |
| ターゲットサーバが停止 | SM51でインスタンスの状態を確認 |
| オペレーションモードでBTCがゼロ | RZ04でモード設定を確認 |
ジョブ設計の注意点
- 同じジョブが多重起動しないよう、名前を一意にするか排他制御を入れる
- 長時間ジョブは分割し、失敗時の再実行範囲を小さくする
- 処理件数が増えても終わるよう、選択条件を絞る
- 失敗時に通知が飛ぶ仕組みを作る(メール通知、監視ツール連携)
- 古いジョブログは定期的に削除する(SM37から、またはRSBTCDEL2で)