「[CentOS7][Rundeck] コマンドを実行する」の続きです。
前回は、コマンドを実行したので、今回は、ジョブを作って即時実行してみます。
環境は以下のとおりです。
今回は下記の3つのステップを持つジョブを作成し、各サーバで実行します。
環境は以下のとおりです。
- Rundeckサーバ(ローカル): centos7 [10.1.0.80]
- ノード1(リモート): pm01 [10.1.0.71]
- ノード2(リモート): pm01 [10.1.0.73]
- プロジェクト: sandbox02
今回は下記の3つのステップを持つジョブを作成し、各サーバで実行します。
- ジョブ(job01)
- step1: /tmp/test.sh のファイル名で自サーバ上にスクリプトを作成する
- step2: step1で作成したRundeck サーバ上の /tmp/test.sh を各サーバに送信して実行する
- step3: step1で作成した自サーバ上の /tmp/test.sh を実行する
ジョブの作成
[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] をクリックして保存します。
[Command]をクリックします。
これで、下図のように3つのステップを持つ Warkfow ができました。
ステップを修正したい場合は、修正したいステップをクリックします。
ステップが作成できたら、
[Nodes]で、このジョブを実行するノードを指定します。
今回は、".*"を入力して、centos7(localhost)/pm01/pm02 で実行するように設定します。
最後に、スクロールして、[Create]をクリックします。
これで、ジョブが保存されます。
ジョブの即時実行
ジョブの作成が成功すると、下図のように表示されます。
[Run Job Now]をクリックすると、ジョブが実行されます。
ログは、ステップを実行した順番で表示されています。
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] をデフォルト設定でジョブを実行したので、各ステップがシーケンシャルに実行されましたが、各サーバでジョブを並列処理させることも可能です。
使い方の詳細は、「ユーザマニュアル(日本語)」を参照してください。