月末あるある──cron編
「月末に処理を動かしたい」──cronを使う方なら、一度は考えたことがあるのではないでしょうか。
そこで、具体的な設定として、こんな指定をしてみます。
0 9 31 * *
これは「毎月31日の午前9時に実行」という意味です。
しかしながら、一見これで「月末処理」ができそうに見えても、小さな落とし穴があります。
31日がない月
なぜなら、ご存じの通り、31日が存在しない月があります。
- 2月 → 最大28日(うるう年でも29日まで)
- 4月、6月、9月、11月 → 30日まで
つまり、この設定では「31日が存在する月」しか処理が動かず、2月や30日で終わる月は月末処理がスキップされてしまうのです。
hsboxの日時指定呼出設定機能の場合は?
このような仕様のcronの仕組みを、hoboxは利用しております。
そのため、この仕様はhsboxにも同じく適用されます。

「月末に必ず実行したい」と思っても、cron単体ではそのまま実現できません。
本当に必要な場合は、
- 30日や28日(29日)も含めて複数設定する
- あるいはスクリプト内で「今日が月末かどうか」を判定する
といった工夫が必要です。
祝日や休日は考慮されない
さらにcronは、祝日や休日を考慮しません。
たとえば、Google Homeの平日指定アラームは、祝日であっても鳴ってしまいます。
Redditでも「Google Homeは法定休日を認識しない」との報告があります。
(reddit.com)
また、Google Assistantでは「翌日は祝日です。アラームを変更しますか?」と通知してくれる機能がありますが、これはPixel端末の「At a Glance」ウィジェットに統合された機能で、すべてのデバイスで使えるわけではありません。
(9to5google.com)
まとめ
まとめるとカレンダーを見れば当たり前ですが、「月末は必ず31日とは限らない」のです。
cronにとっても同じで、「31日」に設定しても万能ではありません。
月末に処理を仕掛けたいときは、この小さなトリビアを思い出してみてください。
そして、「月末はいつ?」と自分に問いかけながら、少しだけ賢くcronを設定してみましょう。
具体的な工夫の例(外部サイト:Linux-Console.net)
Cron ジョブを毎月の最終日に実行するようにスケジュールする方法
参考:
https://community.home-assistant.io/t/google-nest-hubs-alarms/738642?utm_source=chatgpt.com