2015年9月13日日曜日

[CentOS7][Rundeck] ジョブを即時実行する


[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] をデフォルト設定でジョブを実行したので、各ステップがシーケンシャルに実行されましたが、各サーバでジョブを並列処理させることも可能です。

使い方の詳細は、「ユーザマニュアル(日本語)」を参照してください。