概要
dkron は cron のスケジューリングを自動で行ってくれるツールです
ノードを追加していくことでスケジューリングされたジョブを各ノードで分散して実行してくれます
今回は 1 台の Ubuntu 上にインストールし簡単に使ってみました
docker でも動作しますがホストに直接インストールして使っています
環境
- Ubuntu 16.04 LTS
- dkron 1.2.4
インストール
sudo sh -c "echo 'deb [trusted=yes] https://apt.fury.io/victorcoder/ /' > /etc/apt/sources.list.d/dkron.list"
sudo apt -y update
sudo apt -y install dkron
systemd
配下に登録されているので systemctl
コマンドが使えます
修正
sudo vim /lib/systemd/system/dkron.service
ExecStart=/usr/bin/dkron agent --server
--server
が抜けている場合は追記してください
起動
sudo systemctl start dkron
これで localhost:8080
にアクセスすると管理画面が表示されます
ジョブ登録と確認
ジョブと呼ばれる単位で登録していきます
登録は管理画面からは行えないので API を使います
簡単な REST で登録できます
とりあえず 10s おきに date
コマンドを実行するジョブを登録しましょう
curl localhost:8080/v1/jobs -XPOST -d '{
"name": "job1",
"schedule": "@every 10s",
"timezone": "Asia/Tokyo",
"owner": "hawksnowlog",
"owner_email": "hawksnowlog@gmail.com",
"disabled": false,
"tags": {
"dkron_server": "true:1"
},
"concurrency": "allow",
"executor": "shell",
"executor_config": {
"command": "date"
}
}'
schedule
で実行する間隔を登録します
dkron は秒単位でスケジュールすることができます
cron のフォーマットでも可能ですが dkron 内で使える簡易記法もあります
tags
はジョブの検索や実行するノードを指定するときに役立ちます
今回は dkron をインストールした Ubuntu 上でコマンドを実行するので executor
は shell
を指定しています
dkron にはいろいろな executor
が用意されており例えば HTTP リクエスト送信するための executor
などがあります
これでジョブの登録ができます
登録したジョブは API では以下のように取得できます
curl localhost:8080/v1/jobs
curl localhost:8080/v1/jobs/job1
詳細を取得する場合は /jobs/{job_name}
を使ってください
また管理画面でもジョブの確認ができます
動作確認
API であれば executions
をコールしましょう
curl localhost:8080/v1/jobs/job1/executions
ジョブを削除する
DELETE
メソッドでコールするだけです
curl localhost:8080/v1/jobs/job1 -XDELETE
HTTP executor を使ってみる
先程は Shell executor
を使いました
今度は HTTP executor
を使ってみたいと思います
まずは登録します
curl localhost:8080/v1/jobs -XPOST -d '{
"name": "job2",
"schedule": "@every 1m",
"timezone": "Asia/Tokyo",
"owner": "hawksnowlog",
"owner_email": "hawksnowlog@gmail.com",
"disabled": false,
"tags": {
"dkron_server": "true:1"
},
"concurrency": "allow",
"executor": "http",
"executor_config": {
"method": "POST",
"url": "https://kaka-request-dumper.herokuapp.com/",
"headers": "[\"Content-Type: application/json\"]",
"body": "{\"key\":\"value\"}",
"timeout": "30",
"expectCode": "200",
"expectBody": "",
"debug": "true"
}
}'
ポイントはやはり executor
と executor_config
です
リクエストの情報は executor_config
でいろいろと設定します
今回は POST + JSON ボディを送信しています
headers
に Content-Type: application/json
を method
に POST
を設定します
そして body
に JSON を設定するのですがここが文字列を設定しなければなりません
せっかくだったらそのまま JSON を書ければ良いと思って試したのですが Invalid Parameter Error になります
なのでダブルクオートなどはちゃんとエスケープしてあげましょう
expectCode
と expectBody
はレスポンスチェックに使えます
今回は expectCode
だけ指定しています
その場合はステータスコードだけを見て成功かどうか判断します
expectBody
も指定している場合はレスポンスボディもチェックして成功かどうかを判断します
失敗した場合は Not match the expected body
となるようです
失敗した場合はジョブに設定したリトライ設定に応じてリトライするか諦めるかに分岐します
最後に
dkron を Ubuntu 上にインストールして Shell executor
と HTTP executor
を試してみました
基本は REST ベースでやり取りします
競合だと Jenkins などが近いかなと思います
まだ細かく使っていないので何とも言えませんが Executor をカスタムできたりすると便利なような気がします
また結果をメールや Slack で通知できたりするらしいのでその辺りも別記事で紹介したいと思います
0 件のコメント:
コメントを投稿