[Raspberry Pi] cron で「第 X 曜日の前日」に実行3
cron で「第3土曜日の前日」の実行をし、それがうまくいかなかったことを書いた。
[Raspberry Pi] cron で「第 X 曜日の前日」に実行 – with a Christian Wife
https://wacw.cf/2018/12/18/cron-the-day-before-x-th-week/
[Raspberry Pi] cron で「第 X 曜日の前日」に実行2(失敗) – with a Christian Wife
https://wacw.cf/2018/12/22/cron-the-day-before-x-th-week-2/
上記のやり方だとまた金曜日に cron のジョブが実行されてしまった。あれれ、毎週金曜日に実行されてしまう!?
いろいろ調べた結果、やっと謎が解けた。
それは cron ではジョブの指定で、同時に指定された曜日と日付は「AND」ではなく「OR」の意味になってしまうのだ(なんでこんな仕様になっているのか・・・)。
改めてこれまでの設定を見てみよう(第3土曜日の前日 6:50 に実行する場合)。
土曜日から始まらない月の「第3土曜日の前日」
50 6 15-20 * * [ "$(date '+\%w')" -eq 5 ] && [処理内容]
土曜日から始まる月の「第3土曜日の前日」
50 6 14 * 5 [処理内容]
これら2つのジョブを登録していた。
そう、犯人は2つ目のジョブだ。これでは「14 日金曜日のみ(14 日かつ金曜日)」実行されるのではなく「14 日、あるいは毎週金曜日」実行されてしまう。AND ではなく OR になっている。だから以下のように直せばいい。
50 6 14 * * [ "$(date '+\%w')" -eq 5 ] && [処理内容]
つまり 14 日と日付を指定しているけど、曜日は * にしておき、計算式上で金曜日だけ選ばれるようにしている。
これで今度こそうまくいくはず!
参考:
cron – cronで第1営業日を指定する方法はないでしょうか?|teratail
https://teratail.com/questions/119072
[linux] crontab では 毎月特定週の特定曜日の実行はできない – Windows 2000 Blog
http://blog.livedoor.jp/blackwingcat/archives/1029569.html
crontab の日付指定、あなたの理解は間違っている – 頭ん中
https://www.msng.info/archives/2013/12/crontab-day.php
13日の金曜日の指定はダメ! crontabでは特定の「日付かつ曜日」は実行できない パソコン鳥のブログ/ウェブリブログ
https://vogel.at.webry.info/201511/article_1.html