カテゴリー
お知らせ システム 機能使用方法

「13日の金曜日」が「13日と金曜日」

「13日の金曜日」と聞くと、映画や乃木坂の楽曲を思い浮かべる方も多いでしょう。
ではもし、hsboxを使って「13日の金曜日の夜9時に、あの曲を流そう」と思ったらどうなるでしょうか?

cronに次のように書けばいけそうですよね。

0 21 13 * 5

でも実は、ここに小さな落とし穴があります。
cronは「日(13日)」と「曜日(金曜日)」を同時に指定すると、両方を満たすときではなく、どちらかを満たすときに動いてしまうのです。

つまり、

  • 毎月13日の夜9時
  • 毎週金曜日の夜9時
    両方で動作してしまいます。

せっかく「13日の金曜日」だけを狙ったのに、毎週金曜に「13日の金曜日」が流れてしまう…これはちょっとしたホラーかもしれません。


hsBoxの場合は?

hsBox1.3は cron をそのまま使っているため、この仕様に従います。


「13日の金曜日だけ」を狙いたい場合は、かなり工夫が必要です。

たとえば「毎月13日の21時」に設定したうえで、スクリプト側で「今日が金曜日かどうか」を確認する…といった独自処理です。

「ちょっとした遊び心」を実現するには、ちょっとした工夫が必要なんですね。


まとめ

cronは便利ですが、時々こんなユニークな落とし穴があります。
「13日の金曜日」をピンポイントで狙いたいときは、意外と難しい。

次にカレンダーで「13日の金曜日」を見つけたら、思い出してみてください。
そして、もしその日に音楽が流れてきたら…それは設定ミスか、あるいは誰かの遊び心かもしれません。

将来のhsBox、freeBoxでは、「13日の金曜日」を指定できるように強化する方向で検討しています。実験段階から使ってみたい方は、freeBoxプロジェクト資料)に参加して先行活用に挑戦してください。


動画紹介

Loading

カテゴリー
お知らせ システム 機能使用方法

月末のタスクが動かない?cron設定と月末日処理の落とし穴を防ぐコツ

月末あるある──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

Loading