Skip to content
Minero Aoki edited this page Jun 12, 2015 · 1 revision

bricolage-jobnetコマンドはジョブのネットワーク(ジョブネット)を実行するコマンドです。

とりあえずジョブネットを実行する

次のようにジョブネットファイル(*.jobnet)を指定すると、 指定したジョブネットの全ジョブを依存関係に従って 1ジョブずつ(非並列で)実行します。

$ bricolage-jobnet */daily.jobnet

ジョブネットファイルもジョブファイルと同じで 必ずサブシステムディレクトリに置かなければいけません。

ジョブネットの定義

ジョブネットの定義方法については ジョブネットの定義のページを参照してください。

便利なオプション

  • -l, --list-jobs
    • ジョブを実行せず、実行対象のジョブを実行順に表示します。
  • -c, --check
    • ジョブを実行せず、ジョブのパラメーターチェックだけを行います。
  • --single-jobnet JOBNET
    • 指定したジョブネット (JOBNET) のジョブだけを実行する。ジョブネット名は「*」を付けて "*keyword_master/daily" のように指定する("*SUBSYS/NAME")。

ジョブキューによるジョブネット再実行

Bricolageではジョブ障害に備えて、実行予定のジョブ一覧を 永続化されたキュー(ジョブキュー)に入れておくことができます。

ジョブキューを使うと、まだ実行されていないジョブの一覧が 常時記録されるようになるため、人の手でエラー原因を除去したあとで 「エラーが起きたジョブからジョブネットの続きを再実行」することができます。

現在のところ、ファイルに記録することでキューを永続化しています。 本当はRDBMSに記録したかったのですが、ホストやディスクが死ぬよりは ジョブが失敗する可能性のほうが遥かに高いので、実装が簡単なほうにしました。

ジョブキューの指定 (--queue)

ジョブキューを使うには、--queue オプションでキューファイルのパスを指定します。

$ bricolage-jobnet */daily.jobnet --queue /tmp/bricolage.jobnet.queue

キューファイルは実行前にファイルが存在「しない」パスを指定します。 指定したパスにファイルが存在する場合は一切ジョブを実行せず、 キューファイルも変更せずに異常終了します。 ただし、親ディレクトリ(上記で言えば /tmp)は必ず存在していなければなりません。

ジョブキューの仕組み

キューファイルを指定すると、ジョブネットの実行前に、実行すべきジョブ一覧が ファイルに書き出され、ジョブが正常終了するたびにそのジョブが取り除かれます。 最終的に全ジョブが正常終了したらキューファイルは削除されます。

しかし、もし途中でジョブが失敗した場合はキューファイルがそのまま残ります。 この場合はあとで同じキューファイルを指定することで、エラーになったジョブから ジョブネットの続きを再実行することができます。

ちなみに、実行前にキューファイルが存在していてはいけない理由は、 定期的に実行されるバッチの引数を同じにするためです。 ジョブネットが異常終了した中途半端な状態のまま次のバッチが実行されてしまうと 大ダメージなので、キューファイルが存在する(= 前のバッチが異常終了した)場合は 次の実行も蹴るようにしているわけです。

ジョブネットの実行再開

ジョブネットのいずれかのジョブが失敗し、ジョブネット全体がアボートした場合は、 同じ bricolage-jobnet コマンドを再実行することでエラーになったジョブから実行を再開できます。

キューの破棄(ジョブネットの実行しなおし)

ジョブキューを使っているとき、ジョブのエラーにより中断したジョブネットを 最初からやりなおしたい場合は、キューファイルを削除してから bricolage-jobnetコマンドを再度実行してください。