「
[CentOS7][Rundeck] コマンドを実行する」の続きです。
前回は、コマンドを実行したので、今回は、ジョブを作って即時実行してみます。
環境は以下のとおりです。
- Rundeckサーバ(ローカル): centos7 [10.1.0.80]
- ノード1(リモート): pm01 [10.1.0.71]
- ノード2(リモート): pm01 [10.1.0.73]
- プロジェクト: sandbox02
Rundeck のジョブは、複数の処理ステップで構成することができます。
今回は下記の3つのステップを持つジョブを作成し、各サーバで実行します。
- ジョブ(job01)
- step1: /tmp/test.sh のファイル名で自サーバ上にスクリプトを作成する
- step2: step1で作成したRundeck サーバ上の /tmp/test.sh を各サーバに送信して実行する
- step3: step1で作成した自サーバ上の /tmp/test.sh を実行する
また、ジョブをグループ化すると、フォルダ構成のように表示されて管理しやすいので、グループ化することにします。(グループ化は任意です)
ジョブの作成
メニューバーの[Job]をクリックすると下図の画面が表示されます。
[Create Job] をクリックして新しいジョブを作成します。
[Job Name]、[Description]を入力します。
今回は、ジョブのグループ管理を試したい、demoグループ配下のgroup01グループにジョブが所属するように "demo/group01" と入力しています。
下にスクロールして、[Workflow]を入力します。
Workfrow に入力するステップの種類は、複数の選択肢がありますが、今回試すのは、"Command"、"Script"、"Script file or URL" の3つです。
まず、"step1" の処理を入力します。
[Script]をクリックします。
下図の赤枠で示した部分にスクリプトを入力します。
内容は以下のとおり。
echo "++ 開始 + `date '+%Y-%m-%d %H:%M:%S'`"
echo "++ 実行ホスト: `hostname`"
echo "++ 実行ユーザ: `id`"
echo "++ 実行シェル: ${SHELL}"
echo "++ 実行プログラム: $0"
# テストスクリプト作成
echo "++ テストスクリプト作成: /tmp/test.sh"
cat<<'EOF' > /tmp/test.sh
#!/bin/bash
echo "-- START - `date '+%Y-%m-%d %H:%M:%S'`"
EOF
cat<<EOF >> /tmp/test.sh
echo "-- 格納場所: `hostname`"
EOF
cat<<'EOF' >> /tmp/test.sh
echo "-- 実行ホスト: `hostname`"
echo "-- 実行ユーザ: `id`"
echo "-- 実行シェル: ${SHELL}"
echo "-- 実行プログラム: $0"
echo "-- END - `date '+%Y-%m-%d %H:%M:%S'`"
exit 0
EOF
# 実行権限付与
chmod 777 /tmp/test.sh
echo "++ 終了 + `date '+%Y-%m-%d %H:%M:%S'`"
exit 0
入力後、[save]をクリックして保存します。
[Add a step]をクリックして、"step2" の処理を入力します。
[Script file or URL] をクリックします。
[File Path/URL] に実行したいプログラムを入力します。
"/tmp/test.sh" を入力したら、[Save] をクリックして保存します。
[Add a step]をクリックして "step3" の処理を入力します。
[Command]をクリックします。
[Command]に実行したコマンドを入力します。
"/tmp/test.sh" を入力したら、[Save]コマンドをクリックして保存します。
これで、下図のように3つのステップを持つ Warkfow ができました。
ステップを修正したい場合は、修正したいステップをクリックします。
ステップが作成できたら、
[Nodes]で、このジョブを実行するノードを指定します。
今回は、".*"を入力して、centos7(localhost)/pm01/pm02 で実行するように設定します。
最後に、スクロールして、[Create]をクリックします。
これで、ジョブが保存されます。
ジョブの即時実行
ジョブの作成が成功すると、下図のように表示されます。
[Run Job Now]をクリックすると、ジョブが実行されます。
ジョブの実行が完了すると下図のように表示されます。
[Log Output]タブをクリックするとログを見ることができます。
標準出力のメッセージを下図のように見ることができます。
日本語も表示できます。
ログは、ステップを実行した順番で表示されています。
pm01のステップ2のログは、以下のように表示されています。
このログを見ると、Rundeckサーバ(centos7)上の /tmp/test.sh を /tmp/67-52-pm01-test.sh に転送して、rootユーザ(ノード追加時に指定)で実行したことがわかります。 ドキュメントによるとスクリプトの転送には scp を使うようです。
-- START - 2015-09-13 11:17:15
-- 格納場所: centos7
-- 実行ホスト: pm01
-- 実行ユーザ: uid=0(root) gid=0(root) 所属グループ=0(root)
-- 実行シェル: /bin/bash
-- 実行プログラム: /tmp/67-52-pm01-test.sh
-- END - 2015-09-13 11:17:15
pm01のステップ3のログは、以下のように表示されています。
このログを見ると、ステップ1で作成したスクリプトを実行していることがわかります。
-- START - 2015-09-13 11:17:17
-- 格納場所: pm01
-- 実行ホスト: pm01
-- 実行ユーザ: uid=0(root) gid=0(root) 所属グループ=0(root)
-- 実行シェル: /bin/bash
-- 実行プログラム: /tmp/test.sh
-- END - 2015-09-13 11:17:17
今回は、[WorkflowのStrategy] や [Tred Count] をデフォルト設定でジョブを実行したので、各ステップがシーケンシャルに実行されましたが、各サーバでジョブを並列処理させることも可能です。
使い方の詳細は、「
ユーザマニュアル(日本語)」を参照してください。