運用の現場では日々の作業を行うために、さまざまなスクリプトを利用されていると思います。Kompira Enterprise で利用する「ジョブフロー」もスクリプトの一種ですが、Kompira Enterprise 用の特別な記法で処理を記述する必要があります。
本稿では、日々の運用で利用しているスクリプトを Kompira Enterprise に取り入れて実行する方法を紹介します。
※ 本稿は Kompira Enterprise 1.6系に準拠した画像を用いています。
環境情報
本稿は、以下の環境で検証しています。
ソフトウェア | バージョン |
---|---|
Kompira Enterprise | 1.5.5.post7 |
OS | CentOS 7.7.1908 |
または
ソフトウェア | バージョン |
---|---|
Kompira Enterprise | 1.6.2.post4 |
OS | CentOS 8.2.2004 |
スクリプトの例として、ログファイルの退避を行うスクリプトを考えてみます。ログファイルは、直近のものは障害分析などに用いるためにサーバー上に置き、logrotate などでアーカイブされた古いものについてはディスク容量の逼迫を避けるためにファイルサーバーに退避させておく、といった運用例があります。
本稿では、日々の運用業務で以下のようなログファイルを退避させるシェルスクリプト “movelogfile.sh” を使用しているとします。このスクリプトは、指定した複数のフォルダに作成される “*.log” という名前のファイルを、ファイルサーバー上の指定のパスに移動する処理を行います。ここでは、ファイルの移動に scp コマンドを利用しています。また本稿では、上記の「サーバー」、「ファイルサーバー」に相当するマシンを事前に用意の上、これらのマシン間での証明書認証による通信が可能なことを想定しています。
※ 下記のスクリプト中の「転送先のアカウントと IP アドレス」や「メイン処理における関数 MoveFile の引数」はお使いの環境に合わせて設定してください。
#!/bin/sh # 移動対象のログファイル名のパターン ext='*.log' # 転送先のアカウントと IP アドレス (証明書認証により scp で通信可能なこと) user='xxx' host='xxx.xxx.x.x' # 特定拡張子ファイルを指定ディレクトリに移動する関数 # MoveFile 移動元ディレクトリ 移動先ディレクトリ MoveFile(){ FromDir=$1 ToDir=$2 # 移動元ディレクトリの存在確認 if [ ! -d $FromDir ]; then echo "ERROR: 移動元ディレクトリ [ $FromDir ] が存在しません。" exit fi # シェルスクリプト内で対象ディレクトリへ移動 cd $FromDir # 指定のパターンを持つファイルの検索 for FromFile in `find . -name "$ext"` do # 移動先 Name=`echo $FromFile | sed -e 's/\..*\///'` ToFile=$ToDir/$Name # ファイル移動 echo "[ $Name ] を [ $ToDir ] に移動します。" scp $FromFile $user@$host:$ToFile done } # メイン処理 echo "################## START ######################" MoveFile /home/user/project1/ /home/user/log MoveFile /home/user/project2/ /home/user/log MoveFile /home/user/project3/ /home/user/log echo "################### END #######################" exit
これを深夜2:00に定期的に自動実行する場合では、crontab に次のように登録しているでしょう。
0 2 * * * /usr/local/bin/movelogfile.sh
「スクリプトジョブ」オブジェクトの作成
さて、上記のスクリプトの処理を Kompira Enterprise のスクリプトジョブ機能を用いて実行する方法を説明していきます。まず「スクリプトジョブ」型のオブジェクトを作成します。オブジェクトの作成は以下の画像を参考にしてください。
ここで「+」ボタンをクリックすると、次のようなソースを入力する編集画面が表示されます。
「ソース」欄にファイル移動のためのシェルスクリプトを記述します。ここでは上記の “movelogfile.sh” をそのまま転記してください。
スクリプトの実行
スクリプトを実行するサーバーとそのアカウントを指定する必要があります。ここでは事前に作成したノード情報 “server1” 、アカウント情報 “アカウント1” を指定して「実行」をクリックします。(「ノード情報」および「アカウント情報」の設定方法については、「[事前準備] 接続先のサーバを登録する」を参考にしてください。) また、スクリプトが引数を取る場合には「コマンドライン引数」の欄に記述してください。
ここで実行ボタンをクリックすると
- 「スクリプト」に記述したコードを一時ファイル化し、指定の「実行ノード」に転送
- 転送したファイルに実行権限を付与
- スクリプト実行
- 作成した一時ファイルを削除
といったような処理が順次実行されます。
本稿では Kompira Enterprise の「スクリプトジョブ」型のオブジェクトを利用し、サーバー側にシェルスクリプトの一時ファイルを転送して実行するようにしました。もちろん、サーバー側にスクリプトを [ “backup.sh” ] のように用意しておき、起動させるジョブフローを作っても同様の事ができます。しかしジョブフローをメンテナンスする際に、各サーバーに配置されたシェルスクリプトを置き換えるよりは、「スクリプトジョブ」型を利用する方が、集中して管理しやすいといったメリットがあります。
また、このスクリプトを crontab に登録するのと同じように定期的に実行したい場合は「スケジューラを使って定期的にジョブを実行する」で紹介したスケジューラ機能を使用することで、同様の定期的な実行をさせることができます。
さらに、スクリプトジョブの単体での実行だけでなく、Kompira Enterprise のジョブフローの中からスクリプトジョブを呼び出し、結果をさらにジョブフローで扱うということも可能です。
ジョブフローからのスクリプトジョブの実行例は、今後改めてコラムとしてご紹介する予定です。