こんにちは。id:masutaka26 です。
去年の 6/30 からジムに通い始めて、なんとか週に 2~3 のペースで続いています。サプリメントも半信半疑ながら毎日飲んでいますが、ドラッグストアや Amazon で買うと割と高いと思います。
個人的には iHerb がだいぶオススメです。以前 3.6kg のプロテインを買ったらなぜかキャンペーンが適用されて、30% オフの 6,517 円になりました。
さらにこの案件動画を見て、プレワークアウトサプリ(C4 SPORT)にも手を出してしまいました。BCAA も飲んでいます。
Twitter とかで検索すると、初回 10% OFF の紹介コードが見つかると思います。さらにお得です。
何の記事でしたっけ...?そうだ、この記事は Feedforce Advent Calendar 2019 の 5 日目の記事です!
昨日は id:kano-e の「2019 年に会社ボドゲ棚から自宅に持ち帰ったボドゲたち」でした。変わらぬボドゲ愛・・・!
sidekiq-cron で月末を指定する
脈絡ありませんが、sidekiq-cron では last
で月末を指定することが出来ます。
例えば 0 12 last * * Asia/Tokyo
の次回実行は 2019/12/31 12:00 JST
です。2019/11/30 12:00 JST
は無事動きました。
このような設定になります。
sample_job: active_job: true cron: "0 12 last * * Asia/Tokyo" class: "SampleJob" queue: default
この cron 書式は sidekiq-cron が依存する fugit による実装です。
確認はしていませんが、last
の他にも -1
や L
などが使えるようです。
🔗 https://github.com/floraison/fugit/blob/v1.3.3/spec/cron_spec.rb#L734-L747
context 'negative monthdays' do [ [ '* * -1 * *', '* * -1 * *' ], [ '* * -7--1 * *', '* * -7,-6,-5,-4,-3,-2,-1 * *' ], [ '* * -1--27 * *', '* * -31,-30,-29,-28,-27,-1 * *' ], [ '* * -7--1/2 * *', '* * -7,-5,-3,-1 * *' ], [ '* * L * *', '* * -1 * *' ], [ '* * -7-L * *', '* * -7,-6,-5,-4,-3,-2,-1 * *' ], [ '* * last * *', '* * -1 * *' ], ].each { |c, e| it("parses #{c}") { expect(Fugit::Cron.parse(c).to_cron_s).to eq(e) } } end
negative monthdays
って表現は面白い。
healthchecks.io で月末のバッチを監視する
バッチが本当に起動したかを監視するのは難しいと思います。月末の監視はさらに難しいと思います。
過度な依存は禁物ですが、healthchecks.io は選択肢に入れても良いかもしれません。以下の記事をどうぞ。
前述の cron 設定だと 0 12 l * *
で監視することが出来ます。l
は小文字のエルです。
terraform-provider-healthchecksio の設定例です。
resource "healthchecksio_check" "sample_job" { name = "SampleJob" tags = ["production"] grace = "60" schedule = "0 12 l * *" timezone = "Asia/Tokyo" channels = [data.healthchecksio_channel.slack.id] } data "healthchecksio_channel" "slack" { kind = "slack" }
こちらの cron 書式は healthchecks が依存する croniter による実装です。
l
以外の指定は見当たりませんでした。
🔗 https://github.com/taichino/croniter/blob/0.3.29/src/croniter/tests/test_croniter.py#L209-L223
def testLastDayOfMonth(self): base = datetime(2015, 9, 4) itr = croniter('0 0 l * *', base) n1 = itr.get_next(datetime) self.assertEqual(n1.month, 9) self.assertEqual(n1.day, 30) n2 = itr.get_next(datetime) self.assertEqual(n2.month, 10) self.assertEqual(n2.day, 31) n3 = itr.get_next(datetime) self.assertEqual(n3.month, 11) self.assertEqual(n3.day, 30) n4 = itr.get_next(datetime) self.assertEqual(n4.month, 12) self.assertEqual(n4.day, 31)
2019 年もそろそろ終わりです。年末にだけ動くバッチを設定&監視するのも良いかもしれません。
明日は、こばりゅうの記事です。ひこうきかっけー!?お楽しみに。