【Hinemos ジョブ機能】コマンドジョブの使い方と具体例
投稿日: / 更新日:
こんにちは!
今回はHinemosの機能の一つであるジョブ機能、特にコマンドジョブについて取り上げます。
コマンドジョブの作成から、ジョブの実行までを具体例を交えつつお話ししていきたいと思います。
あまり細かい設定はせず初心者向けに操作を行っていくため、
分かっている方は確認用に見て頂ければ嬉しいです。
1.ジョブ機能とは
Hinemosにおけるジョブ機能は、Hinemosにノードとして登録済みのマシン上で、
Hinemosエージェントを介して任意のコマンドを実行できる機能です。
スケジュールを設定することで毎日○○時にコマンドを実行する、毎週△曜日にコマンドでシェルスクリプトを実行するといったこともできるため、定期的に行わなければならない処理を自動化することができます。
Hinemosのジョブは
・ジョブユニット (ジョブの大枠)
・ジョブネット (コマンドジョブをまとめたもの)
・コマンドジョブ (コマンドを実行する)
の三つの要素で構成されます。
ジョブの構造を図で表すと以下のような感じです。
ジョブユニットという大枠の中にジョブネットやコマンドジョブが入っており、
基本的にはコマンドジョブを実行していくことで処理が進みます。
また、あるコマンドジョブ(ジョブネット)の実行結果によって次に実行するジョブを決定する
といったことも可能です。
2.コマンドジョブの実行
今回はジョブの三つの要素のうちコマンドジョブを使用して、
コマンドの実行やシェルスクリプトの実行を行います。
事前準備として、コマンドを実行するノードをリポジトリに登録しておき、
Hinemosエージェントを起動しておきます。
早速ジョブを作成しましょう。
まず、ジョブ設定パースペクティブを開きます。
ジョブ設定[一覧]ビューからマネージャを選択し、ジョブユニットの作成(下図:赤丸)をクリックします。
今回は簡単な設定にするためジョブIDとジョブ名だけ入力し、OKを押下。
これでジョブユニットが作成できました。
次に、先程作成したジョブユニットを選択し、コマンドジョブの作成(下図:赤丸)をクリックします。
コマンドタブを開き、ジョブID、ジョブ名、スコープ、起動コマンドを入力します。
スコープは固定値にして、参照からコマンドを実行したいノードを選択。
起動コマンドに実行したいコマンドを入力します。
今回はdate_confirm.txtに日付を出力するコマンドを入力してみました。
1 |
echo date:`date "+%Y%m%d-%H%M%S"` >> /tmp/date_confirm.txt |
※事前に/tmp/配下にdate_confirm.txtを配置済
OKを押下してコマンドジョブを作成。
登録(下図:赤丸)をクリックし、ジョブユニットを登録します。
これでCMD_JOB01が実行できるようになりました。
早速実行してみましょう。
先程作成したCMD_JOB01を選択し、実行(下図:赤丸)をクリック。
ジョブ履歴パースペクティブを開き、ジョブ履歴[一覧]ビューをみて正常に実行されたかを確認。
念のため、コマンドを実行したマシンでdate_confirm.txtの中身を確認してみます。
ジョブの終了・中断日時と同一のものが出力されており、
コマンドジョブが想定通り実行できたことが確認できました。
続いて、コマンドジョブでシェルスクリプトを実行してみましょう。
先程登録したジョブユニットを選択し、編集モード(下図:赤丸)をクリックします。
コマンドジョブの作成をクリックし、
先程と同様にジョブID、ジョブ名を入力し、コマンドタブを開きます。
※ジョブIDジョブユニット内で一意になっていなければならないため、先程作成したコマンドジョブとは別のものにする
スコープに先程と同じノードを選択し、
起動コマンドには、/tmp/archive_messages.shと入力。
今回は終了状態も見たいので終了状態タブ(上右図)を確認。
終了値0で正常、終了値1で警告になるように設定されていればOKです。
後は先程と同様の手順で登録します。
今回実行するスクリプトは以下のようなものです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#!/bin/sh BACKUP_DIR=/root/backup/ TARGET_FILE=/var/log/*messages-* BACKUP_FILE_NAME=messages`date "+%Y%m%d-%H%M%S"` if ls $TARGET_FILE > /dev/null 2>&1; then cd $BACKUP_DIR find $TARGET_FILE | xargs tar czf $BACKUP_FILE_NAME.tar.gz find $TARGET_FILE | xargs rm else exit 1 fi |
※事前に/tmp/配下にarchive_messages.shを配置済
/var/log/配下のローテートされたmessagesを/root/backup/配下にアーカイブし、元のファイルを削除するというスクリプトです。
ローテートされたファイルがない場合は終了値1を返して終了します。
それでは早速コマンドジョブを実行してみましょう。
比較用にコマンドジョブ実行前の/var/log/配下のmessagesを見ておきます。
先程と同様の手順でCMD_JOB02を実行し、ジョブ履歴を見てみます。
正常に実行できました。
それでは/root/backup/配下を見てみましょう。
アーカイブが作成されており、
日付と時間がジョブの終了・中断日時と一致しています。
次に/var/log/配下のmessagesを見てみましょう。
ジョブ実行前のものと比較してローテートされたmessagesが消えていることが分かります。
これでスクリプトが正常に動作したことが分かりました。
ここで、もう一度先程のスクリプトを実行するコマンドジョブを実行してみましょう。
ジョブ履歴を確認すると、今度は終了状態が警告になりました。
これは、1回目のCMD_JOB02実行でローテートされたmessagesを消してしまったため、
2回目のCMD_JOB02実行時にはローテートされたファイルがないと判断し、終了値1を返したということが分かります。
このように終了値によって終了状態を調整することで、終了状態によりアーカイブが作られたか、作られていないかをすぐに判別できます。
3.おわりに
今回はコマンドジョブの一部を紹介致しましたが、いかがでしたでしょうか。
コマンドジョブには他にも設定がいくつかあり、スケジュール等と組み合わせると様々なことが自動化できます。
例えば、
今回使用したスクリプトを少し書き換えてすべてのローテートされたファイルを対象にします。
そのスクリプトを毎月1日に実行するといったスケジュールを作成し適用すれば、
毎月ローテートされたファイルを圧縮してくれるので、ローテートされたファイルによる容量の肥大化を防ぐことができます。
以上、簡単でしたがコマンドジョブについてお話しさせていただきました。
機会があればジョブ機能を利用した自動化の例をご紹介したいと思います。
それでは失礼します。