[Raspberry Pi] cron で第 x ・ y 曜日の z 日前に処理を実行する

Hitoshi Arakawa | 2024/07/10 Wed 04:02

以前 Mac の cron で、第 x ・ y 曜日の z 日前に処理を実行する方法について書いた。

[Mac] cron で第 x ・ y 曜日の z 日前に処理を実行する|荒川仁志
https://note.com/hitoshiarakawa/n/neb5db3b3f541

同じ「第 x ・ y 曜日の z 日前」を Raspberry Pi で実行しようとすると、cron の記述を変更する必要がある。

環境:Raspberry Pi 4 Model B 8GB(Bookworm Desktop 64-bit)

Mac で -v オプションを使っていたところを、-d(–date)オプションに書き換える。(上のリンクで、-j オプションを付けていたが、Mac でも Raspberry Pi でも -j オプションはいらないようだし、特に Raspberry Pi では付けるとエラーになる。)

i) 「第3土曜日の前日」の朝7時に実行する場合。次の日が土曜日となる、14 から 20 日のいずれかの日。

i-1) Mac

0 7 14-20 * * [ "$(date -v+1d +\%w)" -eq 6 ] && {コマンド}

i-2) Raspberry Pi

0 7 14-20 * * [ "$(date -d '+1 day' +\%w)" -eq 6 ] && {コマンド}

ii) 「第1水曜日の前日」の朝7時に実行する場合。第1水曜日が1日(=次の日が “1日かつ水曜日”)か、それ以外(=次の日が “1~6日の水曜日”)かで2パターン用意する。

i) Mac

0 7 * * * [ "$(date -v+1d +\%w)" -eq 3 ] && [ "$(date -v+1d +\%d)" -eq 1 ] && {コマンド}
0 7 1-6 * * [ "$(date -v+1d +\%w)" -eq 3 ] && {コマンド}

ii) Raspberry Pi

0 7 * * * [ "$(date -d '+1 day' +\%w)" -eq 3 ] && [ "$(date -d '+1 day' +\%d)" -eq 1 ] && {コマンド}
0 7 1-6 * * [ "$(date -d '+1 day' +\%w)" -eq 3 ] && {コマンド}

参考:
Macでdateコマンドが違う件について | learningBOX株式会社
https://learningbox.co.jp/

How to use the date Command - Pi My Life Up
https://pimylifeup.com/date-command-linux/

Mac の date コマンド #macOS - Qiita
https://qiita.com/tanaka-qtaro/items/073aedbe157023403bf7

date コマンド | コマンドの使い方(Linux) | hydroculのメモ
https://hydrocul.github.io/wiki/commands/date.html

Amazon.co.jp: Raspberrypi 正規代理店商品 Raspberry Pi 4 Model B (8GB) made in UK element14製 技適マーク入 : パソコン・周辺機器
https://amzn.to/3RV8CZp