Help us understand the problem. What is going on with this article?

脱cron!Rundeckでジョブスケジューラを構築

More than 3 years have passed since last update.

はじめに

既存の複数台のサーバーに対して定期実行する処理を作らなければならず、2017年にcronを書きまくるという選択肢は無いだろうと思いまして、いくつかジョブスケジューラを検討した結果Rundeckに落ち着いたので設定〜定期実行までのメモです。

試した環境はCentOS7です。

インストール

Javaのインストール

Javaが無ければRundeckは動きません。もしJavaがインストールされていなければインストールしてください。

yum install java-1.8.0

Rundeckのインストール

rpm -Uvh http://repo.rundeck.org/latest.rpm
yum install rundeck

以上でインストールは完了です。

Rundeckの設定

URLの変更

ローカルのブラウザからアクセスさせたいため、外からアクセスさせるグローバルIPなりドメインなりに変更します。

vi /etc/rundeck/rundeck-config.properties
rundeck-config.properties
grails.serverURL=http://ドメイン OR IP:4440

4440のポートを開ける

サーバー側、ネットワークのセキュリティで4440で通信出来るように設定しましょう

adminユーザーの設定

デフォルトのユーザー設定

ユーザー名:admin
パスワード:admin

でアクセスできます。

スクリーンショット 2017-06-23 10.49.25.png

この設定は/etc/rundeck/realm.propertiesに書かれているのですがパスワードも平文でセキュリティ的にも全く良くない状態です。

realm.properties
admin:admin,user,admin,architect,deploy,build

adminのパスワード変更とmd5化

まずはこの平文パスワードを変更して、設定ファイルの記述もmd5にします。

この例ではnewadminを新たなパスワードに設定します。

sudo java -cp /var/lib/rundeck/bootstrap/jetty-all-9.0.7.v20131107.jar org.eclipse.jetty.util.security.Password admin newadmin

すると以下のようなハッシュ値が生成されます

OBF:1x151t331u2a1y7z1b301t121x1h
MD5:b0a24b98c089b3b0f5d4174420cebe0c
CRYPT:advDltGLaH7Bo

ここの MD5:b0a24b98c089b3b0f5d4174420cebe0cの部分を丸コピーします。

そして、/etc/rundeck/realm.propertiesを開いて以下のように変更します。

realm.properties
admin:MD5:b0a24b98c089b3b0f5d4174420cebe0c,user,admin,architect,deploy,build

このスクリプトについて

/var/lib/rundeck/bootstrap/.jarファイルがあるのですが、Rundeckのバージョンによって微妙に番号が違うようです。cd /var/lib/rundeck/bootstrapして、jetty-all-から始まる.jarファイルのファイル名を使ってみてください。

新しいユーザーの追加

ここではadminと同等のユーザーpoweruser、パスワードmypasswordを追加します。

ユーザー追加コマンド

java -cp /var/lib/rundeck/bootstrap/jetty-all-9.0.7.v20131107.jar org.eclipse.jetty.util.security.Password poweruser mypassword

realm.propertiesに追記

adminの時と同じようにハッシュが生成されるのでコピーします。
以下のように/etc/rundeck/realm.propertiesにpoweruserの設定をadmin同様に追加します。

realm.properties
# admin
admin:MD5:b0a24b98c089b3b0f5d4174420cebe0c,user,admin,architect,deploy,build
# poweruser
poweruser:MD5:abc24b98c089b3b0f5d4174420cebe0c,user,admin,architect,deploy,build

aclpolicyの追加

ユーザーの権限設定などがこのaclpolicyファイルに書いてあります。

cd /etc/rundeck && llをすると、adminユーザーのaclpolicyや、今回変更はしませんがpropertiesなどのファイルがあります。

今回はadminと同じ権限のユーザーを作るので、adminのaclpolicyをコピーします。

cd /etc/rundeck
cp admin.aclpolicy poweruser.aclpolicy

これで新しいユーザーの設定は完了です。

rundeckを再起動

設定を反映します。

systemctl restart rundeckd

プロジェクトの追加

最低限の設定

ひとまず名前だけあればプロジェクト作成は出来ます

スクリーンショット 2017-06-23 11.57.03.png

ジョブの作成

Create Jobボタンからジョブの作成をします。
スクリーンショット 2017-06-23 11.57.54.png

ジョブの名前と説明の追加

スクリーンショット 2017-06-23 11.58.57.png

Workflowの追加

今回は Script を選択して、echo "this is TEST"を記入しました。

スクリーンショット 2017-06-23 12.01.09.png

スクリーンショット 2017-06-23 12.01.43.png

入力したらSaveボタンを押下して、ジョブのCreateボタンを押下します。

ジョブの手動実行

登録したジョブをRun Job Nowボタンから実行します。
スクリーンショット 2017-06-23 12.03.11.png

成功するとこんな感じの画像が表示されます。
スクリーンショット 2017-06-23 12.03.55.png

実行の詳細を確認

ReportのタブのNodeを見てみると、入力したechoの処理が実行されていることが分かります。
スクリーンショット 2017-06-23 12.39.37.png

ジョブの定期実行

ジョブの編集画面を開きます
Jobsメニュー⇒Edit this Jobです。

スクリーンショット 2017-06-23 12.41.02.png

Schedule to run repeatedly?を設定

ジョブの設定画面かからSchedule to run repeatedly?Yesに変更して設定していきます。

スクリーンショット 2017-06-23 13.03.13.png

かなり直感的にと言うか、見たまま設定してもらえれば大丈夫です。

スクリーンショット 2017-06-23 13.04.15.png

  • 何時に?
  • 毎日なのか?
  • 毎月なのか?

設定はこれだけです。Crontabモードもあるので、既存のCrontabから移植したりする際は便利そうです。

設定した時間を過ぎたら実行出来ているかを確認してみます。
確認方法は手動実行の時と同じです。

サーバーにログインして処理を実行

ここまではRundeckがインストールされたサーバーに対しての処理を行ってきました。ここからは実際に使うであろう他のサーバーにログインしての処理実行の方法を書いていきます。

前準備

Rundeckがインストールされているサーバーから処理を実行したいサーバーに対してパスワード無しの鍵認証ログインが出来るようになっている必要があります。

ノードの追加

ノードの追加が残念ながらGUIから出来ません。
設定ファイルを以下のように変更します。
今回はtestというプロジェクトを作成したので、以下のファイルを編集します。
/var/rundeck/projects/test/etc/resources.xml

resources.xml
<?xml version="1.0" encoding="UTF-8"?>
<project>
# 既にあるはずのlocalhostの設定
<node name="localhost" description="Rundeck server node" tags="" hostname="localhost" osArch="amd64" osFamily="unix" osName="Linux" osVersion="el7.x86_64" username="rundeck"/>

# 以下を追加
<node name="remotehost" description="Remote server node" tags="" hostname="10.1.0.12" osArch="amd64" osFamily="unix" osName="Linux" osVersion="6.5" username="remoteuser"/>
</project>

<project></project>に以下設定を追加していきます。

  • name:ノードの名前 (必須)
  • description:ノードの説明 (オプション)
  • hostname:接続先のIPアドレス (必須)
  • osArch:OSのアーキテクチャ (オプション)
  • osFamily: windowsとかunixとか (オプション)
  • osName:OS名 (オプション)
  • osVersion:OSのバージョン (オプション)
  • username:sshログインするユーザーの名前 (必須)

詳細はオフィシャルを
http://rundeck.org/docs/man5/resource-xml.html

秘密鍵のセット

今回は既に各SSHにログイン出来るユーザーが居て、秘密鍵と公開鍵のペアがある前提です。

デフォルトの秘密鍵の設定を確認

プロジェクトのホーム画面からConfigureボタンを押下します。
スクリーンショット 2017-06-23 22.13.32.png

Simple Configurationボタンを押下します。
スクリーンショット 2017-06-23 22.14.32.png

Default Node Executorを確認すると
スクリーンショット 2017-06-23 22.15.43.png

/var/lib/rundeck/.ssh/id_rsa

となっています。Default Node File CopierSCPにも同じ値がセットされていると思います。

今回はこの/var/lib/rundeck/.ssh/配下に既存の秘密鍵をセットしていきます。

秘密鍵のコピー

既にremoteuserというユーザーが居て、id_rsaがあって、接続先のサーバにはauthorized_keysがセットされているという前提です。

remoteuserの秘密鍵を/var/lib/rundeck/.ssh配下にコピーして、グループと所有者をrundeckに変更

cp /home/remoteuser/.ssh/id_rsa /var/lib/rundeck/.ssh/remoteuser_id_rsa
chown rundeck remoteuser_id_rsa
chgrp rundeck remoteuser_id_rsa

プロジェクトのkey設定を変更

既出のデフォルトの秘密鍵の設定を確認と同じ手順で設定画面に遷移します。

コピーしたremoteuserのキーを設定します。
スクリーンショット 2017-06-23 22.25.47.png

リモートサーバー実行の処理を追加

ジョブを開いて、WorkflowAdd a StepCommand - Execute a remote commandを設定していきます。

テストとしてpwdを実行します。

スクリーンショット 2017-06-23 22.29.29.png

Saveすると以下の状態になっているはずです。
スクリーンショット 2017-06-23 22.30.15.png

ノードの設定

Dispatch to Nodesを選択してNode Filterremotehostと入力すると、設定されたノードが候補として表示されます。

スクリーンショット 2017-06-23 22.31.35.png

ここまで設定したらSaveを押下して保存します。

リモートホストの実行確認

これまでと同じように実行をして、Succeededの表示が出ていれば成功です。
失敗すると以下のようにFaildの表示がされるので設定の再確認をしてみてください
スクリーンショット 2017-06-23 22.36.23.png

おわりに

これでジョブの定期実行とリモートホストでの実行が出来るようになりました。
cronはcronで手軽に実行出来るのですが、何の目的で誰が追加したか分からない設定が出てきたり、エラーが起きたり、今回のようにサーバーが複数ある時にそれぞれに設定を書いたりすると結構辛かったり、実行エラーが追いにくかったりと様々な問題もあったりします。

Rundeckが全て解決と言うのは少し違うと思いますが、少なくともcronで実行するよりは格段にクリアになる事が多いので、残りの今あるcronも徐々にこちらに移行していこうと思っています。

あと、操作していると感覚的にはJenkinsに近い気がしました。

snoguchi
willgroup
個と組織をポジティブに変革する「チェンジエージェントグループ」
https://willgroup.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away