皆さんこんにちは
お元気ですか。昨日食べた中華そばおいしかったです。
定期的に実行するJobを作成・実行する場合何を使っているでしょうか?
メジャーなツールであれば、cronがあります。
しかし、このツールはCUI、かつ、
他に色々追加したいこと(リトライ、通知)などを
設定したい場合に大変で、面倒です。
そこで、Rundeckです。RCO&RLSさんの勉強会に触発されて使ってみました。
Rundeckとは?
一言で表すとジョブスケジューラです。
ジョブを作成し、実行間隔の管理、通知、実行方式などを管理できます。
GUIで実行コマンドを管理できるので、非常に管理しやすく
過去のログも確認しやすい、成功失敗で通知ができるなど、様々なメリットがあります。
Rundeckの起動
早速、実行用のjarファイルをダウンロードしましょう。
この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を入力します。
ログインすると、プロジェクト管理画面に遷移します。
プロジェクトを生成する。
まずは、プロジェクトが存在しないため、プロジェクトを作成します。
緑色のボタン「New Project」をクリックします。
次にプロジェクトの設定をします。今回は「Project Name」を入れるのみで良いです。
下の方にある作成ボタンを押します。
これで、プロジェクトが作られました。ここからプロジェクトのジョブを作ります。
Jobの作成
これから実際に実行するジョブを作成します。
Workflowで実行したいコマンドを設定します。
試しに「ls /tmp」のコマンドを実行するジョブを構築します。
「Wolkflow」のAdd StepからCommandをクリックし、
Commandに「ls /tmp」を入力しましょう。
そして、Createボタンを押します。
実行&結果表示
作成したジョブを実行します。
緑色のボタンである「Run Job Now」をクリックしましょう。
実行すると結果を確認できます。ちゃんと成功していますね!
結果のタブは以下の意味があります。
- Summary:ジョブが成功した失敗したの概要
- Report:結果のレポート
- Log Output:標準の出力
- Definition:ジョブの定義
2つのコマンドを使い、片方を失敗する場合
前回はシンプルな実行をするジョブでした。しかし、次は少々なジョブを作成します。
「cat /tmp」と「ls /tmp」のコマンドを組み合わせます。前回と同じように追加していきます。
今回のポイントは、「Run remaining steps before failling」です。
これを選択することで、前段のコマンドが失敗した場合も継続して後段が実行されます。
今回は「cat /tmp」が失敗、「ls /tmp」が成功します。
実行結果です。この結果から2つのコマンドが実行され、
1件のコマンドが成功、1件が失敗していることがわかります。
これで、2つ以上のコマンドが実行できることを確認できました。
定期的に実行する
本記事最後にRundeckを利用した定期実行を行ってみます。
まずは、ジョブを作ります。今回はdf -hのディスク確認コマンドを実行するタスクを作ります
今回は「Schedule to run repeatedly?」の項目をYesにします。
これをYesにすることで、定期実行ジョブの設定が可能となります。
crontab形式の設定が可能のため、その設定を行います。設定を行った画面は次になります。
このcrontabの設定だと毎分、実行するコマンドになります。
実行画面に遷移し、時々リロードすると、画面が更新されて定期的に実行されることがわかります。
これでリッチな定期実行タスクの設定ができますね。
最後に
まだまだRundeck使いこなせていませんが、リモートのジョブを実行する、
通知機能(拡張すればSlackも)の実行などを行うことができ、非常に便利です。
やっぱり機械学習バッチを作る時に便利かも・・