Rundeck

2016/09/22更新

対応バージョン: 2.6.9

ジョブコントローラRundeckは今まで煩雑になりがちだったcronに代表されるUNIXにおける定形処理を統合的に管理してくれるサービスで、多重実行の制御、処理結果の保存、エラー時の処理やジョブ間の連携、メールやWebhookによる通知など様々な機能が提供されている。

リモートホストに対するジョブ実行に対してもエージェントのインストールが不要なため(要SSH接続)、複数ホストにまたがるジョブの管理が容易になる。

またWebのUIが用意されているので直感的なジョブの定義や操作が可能で、スケジューリングにcrontab形式が使用できることによりcronからの移行もスムーズに行える。

ここではこのRundeckをUbuntuに導入する手順を示す。

インストール

RundeckはJavaで書かれているのでまずJavaの実行環境をインストールする。

% sudo apt install openjdk-8-jre openjdk-8-jre-headless ca-certificates-java java-common

% java -version
openjdk version "1.8.0_91"
OpenJDK Runtime Environment (build 1.8.0_91-8u91-b14-3ubuntu1~16.04.1-b14)
OpenJDK 64-Bit Server VM (build 25.91-b14, mixed mode)

続いてRundeckのダウンロードページから最新版を入手してインストールする(本記事執筆時点のバージョンは2.6.9)。Ubuntuの場合はdebパッケージを使用する。

% sudo dpkg -i rundeck-2.6.9-1-GA.deb

初期設定

インストールが終わったら必要最低限の設定としてWeb UIのURLを設定する。

デフォルトで指定されているlocalhostを実際のホスト名に変更する。ポートはデフォルトのままでも変えてもよい。

% cd /etc/rundeck
% sudo vi rundeck-config.properties
:
  8 grails.serverURL=http://localhost:4440
:

サービス起動

設定が終わったらサービスを有効化して起動する。

% sudo systemctl enable rundeckd
% sudo systemctl start rundeckd

ログは/var/log/rundeck配下に目的別に出力される。主にチェックすべきは以下のログである。

service.log

サービス全体の状況

rundeck.executions.log

ジョブの実行状況

ブラウザからのアクセス

Webブラウザからhttp://Rundeckサーバ:4440/にアクセスする。

以下の画面が表示されadmin(パスワードも同じ)でログインできれば正常に動作している。

実際のジョブの定義や実行方法は以下の資料が詳しいのでここでは割愛する。

資料の中で書かれていないが、SSHの鍵ペアの作成は以下の手順で行う。

% cd /var/lib/rundeck

% sudo mkdir -m 700 .ssh
% sudo chown rundeck.rundeck .ssh

% sudo -u rundeck ssh-keygen -f .ssh/id_rsa -N ''
Generating public/private rsa key pair.
Your identification has been saved in .ssh/id_rsa.
Your public key has been saved in .ssh/id_rsa.pub.
The key fingerprint is:
SHA256:xnanNPs69abdIXaMJbXvRLZ2+dD/iX1YFu7xWGVBa0s rundeck@xxxxx
The key's randomart image is:
+---[RSA 2048]----+
|             .   |
|            . .  |
|             E.  |
|       .    o.o. |
|        S . ooooo|
|       o o.o.=+=o|
|        ..o.+++==|
|        .o +*+B+*|
|        o+o+** +*|
+----[SHA256]-----+

% sudo ls -l .ssh
合計 8
-rw------- 1 rundeck rundeck 1679  9月 22 17:13 id_rsa
-rw-r--r-- 1 rundeck rundeck  394  9月 22 17:13 id_rsa.pub

リモートホスト上でジョブを実行したい場合、このid_rsa.pubの内容をリモートサーバ上の~rundeck/.ssh/authorized_keysに追記する。

注意点

crontab形式の書式

Rundeckはジョブのスケジューリングをcrontab形式で指定できるが、一般的な方法に比べて日時の書式が拡張されているので注意が必要である。

一般
分 時 日 月 曜 コマンド
Rundeck (先頭に秒、末尾に年が拡張されている)
秒 分 時 日 月 曜 年 コマンド

外部メールサーバ利用時の設定

外部メールサーバを利用する場合、/etc/rundeck/rundeck-config.propertiesに設定を記述しても機能しないのでGroovy形式に書き換える必要がある。

以下、その手順を示す。ここでは外部メールサーバとしてGmailのサーバを使用するものとする。

% cd /etc/rundeck
% sudo mv rundeck-config.properties rundeck-config.groovy
% sudo vi rundeck-config.groovy
loglevel.default = "INFO"
rdeck.base = "/var/lib/rundeck"

rss.enabled = "false"

grails.serverURL = "http://<Rundeckサーバ>:4440"
dataSource.dbCreate = "update"
dataSource.url = "jdbc:h2:file:/var/lib/rundeck/data/rundeckdb;MVCC=true;TRACE_LEVEL_FILE=4"

grails {
  mail {
    host = "smtp.gmail.com"
    port = "587"
    username = "xxxxx@gmail.com"
    password = "xxxxx"
    props = ["mail.smtp.starttls.enable":"true",
             "mail.smtp.auth":"true",
             "mail.smtp.socketFactory.port":"587",
             "mail.smtp.socketFactory.fallback":"false"]
  }
}

「:」や「@」などの記号が含まれる文字列はそのままだとシンタックスエラーになるので「"」で囲む。

Groovy形式の設定ファイルが用意できたらこのファイルを読み込むようにprofileファイルを編集する。

% sudo vi profile

(変更前)
34  -Drundeck.config.location=/etc/rundeck/rundeck-config.properties \

(変更後)
34  -Drundeck.config.location=/etc/rundeck/rundeck-config.groovy \

設定を変更したらサービスを再起動する。

% sudo systemctl restart rundeckd

これで外部メールが利用可能になる。

参考サイト