概要
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 updatesudo 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/jobscurl 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 件のコメント:
コメントを投稿