【Hinemos 5.0】特定のジョブの実行結果をコマンドで取得する(その1)
投稿日: / 更新日:
この記事は2年以上前に書かれたものです。情報が古い可能性があります。
Hinemosのジョブ管理機能では、「待ち条件」を使うことで、あるジョブの終了状態や終了値に応じて、次のジョブを実行するかどうかを制御することができます。
それでは、次のジョブの動作そのものを、前のジョブの実行結果によって変えたい場合はどうすれば良いでしょうか。
解決策
やや手の込んだ方法になりますが、WebサービスAPIやコマンドラインツール(※)を使って、前のジョブの実行結果をHinemosマネージャから取得し、内容を解析して必要な部分を取り込む、という方法が考えられます。
※コマンドラインツールは、Hinemosの保守契約等を締結されているお客様に対して提供しているツールです。
まずは、コマンドラインツールでどのような情報が取得できるか確認してみます。適当なジョブユニット(JU_TEST)とジョブ(JB_TEST)を登録し、Hinemosクライアント上で実行した後、コマンドラインツールのJob_getNodeDetailList.py
で、先ほど実行したジョブの”ノード詳細”の情報を取得してみます。実行例は以下のとおりです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[root@nodexxx hinemos_command_line]# ./Job_getNodeDetailList.py \ > -H http://127.0.0.1:8080/HinemosWS/ -U hinemos -w hinemos \ > -S 20161128174354-000 -J JU_TEST -I JB_TEST [(jobNodeDetail){ endDate = "2016/11/28 17:43:55.794" endValue = 12 facilityId = "nodexxx" message = "[2016/11/28 17:43:55] stdout=, stderr= [2016/11/28 17:43:55] コマンド終了待ち [2016/11/28 17:43:54] エージェント応答待ち" nodeName = "nodexxx" startDate = "2016/11/28 17:43:55.742" status = 300 }] http://127.0.0.1:8080/HinemosWS/, getNodeDetailList succeeded. |
-S
でセッションID、-J
でジョブユニットID、-I
でジョブIDを指定します。なお、ジョブの起動コマンドには便宜上、exit 12
を設定しています。
出力結果のうち、endValue = 12
が、ジョブの起動コマンドの戻り値です。ということは、上記の出力結果から、このendValue
の右辺の数字だけを取り出せば良さそうです。
1 2 3 4 5 |
[root@nodexxx hinemos_command_line]# ./Job_getNodeDetailList.py \ -H http://127.0.0.1:8080/HinemosWS/ -U hinemos -w hinemos \ -S 20161128174354-000 -J JU_TEST -I JB_TEST \ | grep endValue | perl -pe 's/\A\s+endValue = (\d+)\b.+\z/$1/ms' 12(改行なし) |
では、実際にジョブに当てはめてみます。JB_TESTの後続ジョブとしてJB_TEST2を登録し、JB_TESTの終了状態”*”を待ち条件に設定します。
起動コマンドは、ひとまず先行ジョブJB_TESTの起動コマンドの戻り値を出力するだけの内容にします。なお、ジョブセッションのみ可変となるため、#[SESSION_ID]
というジョブ変数に置き換える必要があります。起動コマンドの例は以下のとおりです(実際には1行で記述します。なお、エラー処理等は全く考慮していませんので、あくまでサンプルとしてご覧ください)。
1 2 3 4 |
echo `/opt/hinemos_command_line/Job_getNodeDetailList.py -H http://127.0.0.1:8080/HinemosWS/ -U hinemos -w hinemos -S #[SESSION_ID] -J JU_TEST -I JB_TEST | grep endValue | perl -pe 's/\A\s+endValue = (\d+)\b.+\z/$1/ms'` |
実行結果は以下のとおりです。JB_TEST2の出力(stdout)のところに、先行ジョブの戻り値(12)が出力されていることが確認できます。
JB_TEST2側で、この値を本来の起動コマンドに渡せば、後は煮るなり焼くなり好きに使うことができます。
(2016/11/29 追記) 上記の方法では、先行ジョブの実行ノードがスコープで複数指定されている場合に、期待どおり動作しません。こちらの記事に解決策を記載しましたので、併せてご覧ください。
簡単ですが、今回は以上です。次回は、ジョブ自体の終了値等をコマンドで取得する方法をご紹介したいと思いますので、お楽しみに(^o^)/