[Mac] 隔週の指定曜日にコマンドを実行

今年は「午前十時の映画祭」に行くことにした。

午前十時の映画祭10 デジタルで甦る永遠の名作
http://asa10.eiga.com/

午前十時の映画祭は隔週ごとに作品が上映される。チケットの予約を忘れないようにしたい。

ということで、cron で隔週ごとにメール通知を送るようにした。24 時間動かしている Raspberry Pi を使うのも悪くないけど、たまには Mac の cron も活用してみることにした。Mac は日中は毎日起動しているので、その間に cron を動かせばいい。

隔週で cron を動かすには以下のサイトが参考になった。

隔週でコマンド実行する方法【Linux – cron】 – サバとエンガワ
https://www.server-engineer.net/entry/2018/01/19/212222

Mac でコマンドでメール送信するための設定方法は以前書いた。

Mac の Terminal でメール送信 – with a Christian Wife
https://wacw.cf/2018/12/17/sending-email-with-mac-terminal/

***

今回は隔週木曜日の 18:15 にメール通知をすることにした。

(1)現在の週番号を確認する。

$ date +%W

本原稿の執筆時点で 13 週だった。午前十時の映画祭は奇数週金曜日に新しい映画が公開される。だから奇数週木曜日に通知させればいいということだ。

参考:
dateコマンド – HiiHahWIKI – making some notes for… –
http://www.hiihah.info/index.php?date%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89

if 文と test コマンド | UNIX & Linux コマンド・シェルスクリプト リファレンス
https://shellscript.sunone.me/if_and_test.html

(2)Mac の cron に以下を登録する。

15 18 * * 4 [ "$(expr $(date '+\%W') \% 2 )" -ne 0 ] && echo "http://asa10.eiga.com/2019/theater/all/" | mail -s "Book asa10" [送信先メールアドレス]

計算式部分は別の書き方にすることもできる。

15 18 * * 4 test $(expr $(date '+\%W') \% 2 ) -ne 0 && echo "http://asa10.eiga.com/2019/theater/all/" | mail -s "Book asa10" [送信先メールアドレス]

今回は奇数週に実行するけど、もし偶数週に実行するなら -ne 0 ではなく -eq 0 にする(週番号を2で割った余りで判断している)。

これで奇数週木曜日の 18:15 に Book asa10 というタイトルで、本文に上映スケジュールのリンクが書かれたメールが届くようになる。

参考:
[Raspberry Pi] cron で「第 X 曜日の前日」に実行3 – with a Christian Wife
https://wacw.cf/2018/12/29/cron-the-day-before-x-th-week-3/