やりたいこと
自分用の便利ツールをcronで実行するケースが増えてきた。
cronでもいいんだけど、WEBでJOBを確認したり、止めたりしたい。
自前のサーバで動作するため、Dockerで動かせたい。
クラスタとか、マルチ構成はやらない。
Dkronとは
簡単で信頼性の高いCronジョブらしい
Install
公式イメージがあるためDockerコマンドで一発起動。
オプションについて
Webのポートを8080でそのままフォワード
ジョブ情報は外だししたいのでdkron.dataボリュームをマウント
マウントしたボリュームをdkronの起動オプション(--data-dir)に設定
クラスタ構成にしないのでbootstrap-expectは1
ノード名を付けないとランダム名になりdocker rm dkron → docker run っとすると前回の情報をうまく引き継げないので適当につける(node-name)
docker run --name dkron -p 8080:8080 -d -v dkron.data:/dkron.data dkron/dkron agent --server --bootstrap-expect=1 --data-dir=/dkron.data --node-name=node1
Job登録
以下のURLよりダッシュボードへ遷移してJOBを登録する。
昔のdkronは/dashboard がパスだったらしく迷ったのでメモ
もちろんHTTPからAPIつついてもJOB登録可能
curl localhost:8080/v1/jobs -XPOST -d '{
"name": "job1",
"schedule": "@every 10s",
"timezone": "Europe/Berlin",
"owner": "Platform Team",
"owner_email": "platform@example.com",
"disabled": false,
"tags": {
"server": "true:1"
},
"metadata": {
"user": "12345"
},
"concurrency": "allow",
"executor": "shell",
"executor_config": {
"command": "date"
}
}'
Jobの動作確認
以下のURLより確認する。
先ほどAPIで登録したjob1が10秒ごとに動いてるっぽい。
タイムゾーンの設定
cron起動する場合、タイムゾーンがUTCになっていたので「Asia/Tokyo」にしたい。
🙅 だめなやり方
Dockerのrunオプション( -e TZ=Asia/Tokyo )ではだめだった
🙆 正しいやり方
ホストのlocaltimeをコピってあげればよかった
docker cp /etc/localtime dkron:/etc/