【Hinemos ジョブ機能】コマンドジョブの使い方と具体例

こんにちは!
今回はHinemosの機能の一つであるジョブ機能、特にコマンドジョブについて取り上げます。
コマンドジョブの作成から、ジョブの実行までを具体例を交えつつお話ししていきたいと思います。
あまり細かい設定はせず初心者向けに操作を行っていくため、
分かっている方は確認用に見て頂ければ嬉しいです。

 

まずはジョブ機能とはどのようなものかを説明しましょう。
Hinemosにおけるジョブ機能は、Hinemosにノードとして登録済みのマシン上で、
Hinemosエージェントを介して任意のコマンドを実行できる機能です。
スケジュールを設定することで毎日○○時にコマンドを実行する、毎週△曜日にコマンドでシェルスクリプトを実行するといったこともできるため、定期的に行わなければならない処理を自動化することができます。

Hinemosのジョブは
・ジョブユニット (ジョブの大枠)
・ジョブネット  (コマンドジョブをまとめたもの)
・コマンドジョブ (コマンドを実行する)
の三つの要素で構成されます。
ジョブの構造を図で表すと以下のような感じです。

ジョブ構造

ジョブユニットという大枠の中にジョブネットやコマンドジョブが入っており、
基本的にはコマンドジョブを実行していくことで処理が進みます。
また、あるコマンドジョブ(ジョブネット)の実行結果によって次に実行するジョブを決定する
といったことも可能です。
今回はジョブの三つの要素のうちコマンドジョブを使用して、
コマンドの実行やシェルスクリプトの実行を行います。

事前準備として、コマンドを実行するノードをリポジトリに登録しておき、
Hinemosエージェントを起動しておきます。

エージェントビュー

早速ジョブを作成しましょう。
まず、ジョブ設定パースペクティブを開きます。
ジョブ設定[一覧]ビューからマネージャを選択し、ジョブユニットの作成(下図:赤丸)をクリックします。

ジョブユニットの作成

今回は簡単な設定にするためジョブIDとジョブ名だけ入力し、OKを押下。

JOB_UNIT01

これでジョブユニットが作成できました。
次に、先程作成したジョブユニットを選択し、コマンドジョブの作成(下図:赤丸)をクリックします。

コマンドジョブの作成

コマンドタブを開き、ジョブID、ジョブ名、スコープ、起動コマンドを入力します。
スコープは固定値にして、参照からコマンドを実行したいノードを選択。
起動コマンドに実行したいコマンドを入力します。

CMD_JOB01

今回はdate_confirm.txtに日付を出力するコマンドを入力してみました。

※事前に/tmp/配下にdate_confirm.txtを配置済

tmp配下

OKを押下してコマンドジョブを作成。
登録(下図:赤丸)をクリックし、ジョブユニットを登録します。

登録

これでCMD_JOB01が実行できるようになりました。
早速実行してみましょう。
先程作成したCMD_JOB01を選択し、実行(下図:赤丸)をクリック。

実行

ジョブ履歴パースペクティブを開き、ジョブ履歴[一覧]ビューをみて正常に実行されたかを確認。

ジョブ履歴

念のため、コマンドを実行したマシンでdate_confirm.txtの中身を確認してみます。

date_confirm確認

ジョブの終了・中断日時と同一のものが出力されており、
コマンドジョブが想定通り実行できたことが確認できました。

続いて、コマンドジョブでシェルスクリプトを実行してみましょう。
先程登録したジョブユニットを選択し、編集モード(下図:赤丸)をクリックします。

編集モード

コマンドジョブの作成をクリックし、
先程と同様にジョブID、ジョブ名を入力し、コマンドタブを開きます。
※ジョブIDジョブユニット内で一意になっていなければならないため、先程作成したコマンドジョブとは別のものにする
スコープに先程と同じノードを選択し、
起動コマンドには、/tmp/archive_messages.shと入力。

CMD_JOB02   CMD_JOB02_終了状態

今回は終了状態も見たいので終了状態タブ(上右図)を確認。
終了値0で正常、終了値1で警告になるように設定されていればOKです。
後は先程と同様の手順で登録します。
今回実行するスクリプトは以下のようなものです。

※事前に/tmp/配下にarchive_messages.shを配置済

tmp配下_archive

/var/log/配下のローテートされたmessagesを/root/backup/配下にアーカイブし、元のファイルを削除するというスクリプトです。
ローテートされたファイルがない場合は終了値1を返して終了します。

それでは早速コマンドジョブを実行してみましょう。
比較用にコマンドジョブ実行前の/var/log/配下のmessagesを見ておきます。

varlog配下確認

先程と同様の手順でCMD_JOB02を実行し、ジョブ履歴を見てみます。

ジョブ履歴_スクリプト

正常に実行できました。
それでは/root/backup/配下を見てみましょう。

archive_messages確認

アーカイブが作成されており、
日付と時間がジョブの終了・中断日時と一致しています。
次に/var/log/配下のmessagesを見てみましょう。

archive_messages確認2

ジョブ実行前のものと比較してローテートされたmessagesが消えていることが分かります。
これでスクリプトが正常に動作したことが分かりました。
ここで、もう一度先程のスクリプトを実行するコマンドジョブを実行してみましょう。
ジョブ履歴を確認すると、今度は終了状態が警告になりました。

ジョブ履歴_スクリプト2

これは、1回目のCMD_JOB02実行でローテートされたmessagesを消してしまったため、
2回目のCMD_JOB02実行時にはローテートされたファイルがないと判断し、終了値1を返したということが分かります。
このように終了値によって終了状態を調整することで、終了状態によりアーカイブが作られたか、作られていないかをすぐに判別できます。

今回はコマンドジョブの一部を紹介致しましたが、いかがでしたでしょうか。
コマンドジョブには他にも設定がいくつかあり、スケジュール等と組み合わせると様々なことが自動化できます。
例えば、
今回使用したスクリプトを少し書き換えてすべてのローテートされたファイルを対象にします。
そのスクリプトを毎月1日に実行するといったスケジュールを作成し適用すれば、
毎月ローテートされたファイルを圧縮してくれるので、ローテートされたファイルによる容量の肥大化を防ぐことができます。

以上、簡単でしたがコマンドジョブについてお話しさせていただきました。
機会があればジョブ機能を利用した自動化の例をご紹介したいと思います。
それでは失礼します。