のんびりしているエンジニアの日記

ソフトウェアなどのエンジニア的な何かを書きます。

Rundeckを使ってリッチに定期ジョブを作った

Sponsored Links

皆さんこんにちは
お元気ですか。昨日食べた中華そばおいしかったです。

定期的に実行するJobを作成・実行する場合何を使っているでしょうか?
メジャーなツールであれば、cronがあります。

しかし、このツールはCUI、かつ、
他に色々追加したいこと(リトライ、通知)などを
設定したい場合に大変で、面倒です。

そこで、Rundeckです。RCO&RLSさんの勉強会に触発されて使ってみました。

Rundeckとは?

一言で表すとジョブスケジューラです。
ジョブを作成し、実行間隔の管理、通知、実行方式などを管理できます。

GUIで実行コマンドを管理できるので、非常に管理しやすく
過去のログも確認しやすい、成功失敗で通知ができるなど、様々なメリットがあります。

個人的に思いつく使い道は機械学習バッチ処理ですね!

Rundeckの起動

早速、実行用のjarファイルをダウンロードしましょう。

rundeck.org

このjarファイルを実行すれば立ち上がります。起動コマンドは次のとおりです。

java -jar rundeck-launcher-2.8.2.jar

起動時に必要な設定ファイル群も作られます。
まずは、config/rundeck-config.propertiesの7行目のgrails.serverURLを変更します。
但し、起動時に作られるconfigファイルはserverのURLが誤っているため、画面の遷移ができません。
ローカルで起動する場合は、localhostで大丈夫です。localhostの例を次に示します。

#rss.enabled if set to true enables RSS feeds that are public (non-authenticated)
rss.enabled=false
grails.serverURL=http://localhost:4440
dataSource.dbCreate = update
dataSource.url = jdbc:h2:file:/Users/Tereka/Programing/Software/Rundeck/server/data/grailsdb;MVCC=true

設定後に改めてサーバを起動しましょう。

Rundeckを使ってみる

まずは、アクセスします。http://localhost:4440へアクセスしましょう。
このアドレスを入力するとログイン画面に遷移します。こちらはID, PASS共に、adminを入力します。

f:id:tereka:20170520192935p:plain

ログインすると、プロジェクト管理画面に遷移します。

プロジェクトを生成する。

まずは、プロジェクトが存在しないため、プロジェクトを作成します。
緑色のボタン「New Project」をクリックします。

f:id:tereka:20170520193842p:plain

次にプロジェクトの設定をします。今回は「Project Name」を入れるのみで良いです。
下の方にある作成ボタンを押します。

f:id:tereka:20170520193902p:plain

これで、プロジェクトが作られました。ここからプロジェクトのジョブを作ります。

Jobの作成

これから実際に実行するジョブを作成します。

f:id:tereka:20170521231130p:plain

Workflowで実行したいコマンドを設定します。
試しに「ls /tmp」のコマンドを実行するジョブを構築します。
「Wolkflow」のAdd StepからCommandをクリックし、
Commandに「ls /tmp」を入力しましょう。

f:id:tereka:20170521231704p:plain

そして、Createボタンを押します。

実行&結果表示

作成したジョブを実行します。
緑色のボタンである「Run Job Now」をクリックしましょう。

f:id:tereka:20170521231917p:plain

実行すると結果を確認できます。ちゃんと成功していますね!
結果のタブは以下の意味があります。

  1. Summary:ジョブが成功した失敗したの概要
  2. Report:結果のレポート
  3. Log Output:標準の出力
  4. Definition:ジョブの定義

f:id:tereka:20170521231925p:plain

2つのコマンドを使い、片方を失敗する場合

前回はシンプルな実行をするジョブでした。しかし、次は少々なジョブを作成します。
「cat /tmp」と「ls /tmp」のコマンドを組み合わせます。前回と同じように追加していきます。

今回のポイントは、「Run remaining steps before failling」です。
これを選択することで、前段のコマンドが失敗した場合も継続して後段が実行されます。
今回は「cat /tmp」が失敗、「ls /tmp」が成功します。

f:id:tereka:20170521233017p:plain

実行結果です。この結果から2つのコマンドが実行され、
1件のコマンドが成功、1件が失敗していることがわかります。

f:id:tereka:20170521232830p:plain

これで、2つ以上のコマンドが実行できることを確認できました。

定期的に実行する

本記事最後にRundeckを利用した定期実行を行ってみます。
まずは、ジョブを作ります。今回はdf -hのディスク確認コマンドを実行するタスクを作ります

今回は「Schedule to run repeatedly?」の項目をYesにします。
これをYesにすることで、定期実行ジョブの設定が可能となります。
crontab形式の設定が可能のため、その設定を行います。設定を行った画面は次になります。

このcrontabの設定だと毎分、実行するコマンドになります。

f:id:tereka:20170521234230p:plain

実行画面に遷移し、時々リロードすると、画面が更新されて定期的に実行されることがわかります。

f:id:tereka:20170521234240p:plain

これでリッチな定期実行タスクの設定ができますね。

最後に

まだまだRundeck使いこなせていませんが、リモートのジョブを実行する、
通知機能(拡張すればSlackも)の実行などを行うことができ、非常に便利です。

やっぱり機械学習バッチを作る時に便利かも・・