cronの書き方で毎度悩む期間指定。めったに触らないから調べても忘れる。
ということでメモ。
基本的な記述は,「分,時,日,月,曜日」の5つのフィールドに指定したい値を書く。
cron(8) examines cron entries every minute.
The time and date fields are:
field allowed values
----- --------------
minute 0-59
hour 0-23
day of month 1-31
month 1-12 (or names, see below)
day of week 0-7 (0 or 7 is Sunday, or use names)
毎時,毎月などは スラッシュで指定する。例えば「2時間毎に」としたいならば
* */2 * * *
とする。それは分かる。だがしかし,これは何処を起点に2時間をカウントしはじめるのだろう,設定した時間からカウント始めるのか?それとも0時0分をスタートとして0,2,4,6,8,10,12,・・・としていくのだろうか?と毎度分からなくなる(忘れる)。ソースコードを読み解けば分かるのかもしれないが,そんな技量はないので実際に設定して確認する。
*/3 * * * * date >> /home/user/check
このときの実行状況は以下の通り。
2021年 3月 13日 土曜日 10:18:01 JST
2021年 3月 13日 土曜日 10:21:01 JST
2021年 3月 13日 土曜日 10:24:01 JST
2021年 3月 13日 土曜日 10:27:01 JST
2021年 3月 13日 土曜日 10:30:01 JST
2021年 3月 13日 土曜日 10:33:01 JST
2021年 3月 13日 土曜日 10:36:01 JST
2021年 3月 13日 土曜日 10:39:01 JST
0分からカウントされているっぽい。では41分に4分間隔に変更するとどうだろう。
*/4 * * * * date >> /home/user/check
41分からカウント開始とするなら45分に実行されるはずだが,0分スタートとするならば,44分に実行されるはず。
2021年 3月 13日 土曜日 10:39:01 JST
2021年 3月 13日 土曜日 10:44:01 JST
44分。デスヨネ。なんとなく気づいていましたよ。everyや毎にという言葉が悪い(違。
ただ,そうすると「50分毎に」や「9ヶ月毎に」など時刻ベースではなく純粋に時間間隔で実行したいときはどうするのだろう。
50 * * * *
とすると,0時50分,1時50分,2時50分と毎時50分になる。cronではそういうことは想定していないのだろうな。そもそもマニュアルに“run this command at this time on this date”ってあるしね・・・。個別にスクリプトを書くしかないのか。