はじめに
今日、仕事絡みでcrontabを使用した実行タイミングについて思案していたところ、想像はできるけど確証はできない。
というわけで、ちゃんとデータで実証してみようと思いつき、試してみたので、参考にどうぞ
前提
- 今回の検証は分のみで行う
- 時・日などは分のやりかたで応用できるため
検証方法
vagrantのVM上でcrontabを書き、2時間ぐらいほおっておいた
- UTC 5:40 〜 7:25 ぐらいまで
- JST 14:40 〜 16:25
crontab -l
# m h dom mon dow command
* * * * * echo `date` >> /vagrant/hoge/log1.log
*/1 * * * * echo `date` >> /vagrant/hoge/log2.log
*/3 * * * * echo `date` >> /vagrant/hoge/log3.log
0/1 * * * * echo `date` >> /vagrant/hoge/log4.log
0/3 * * * * echo `date` >> /vagrant/hoge/log5.log
5/1 * * * * echo `date` >> /vagrant/hoge/log6.log
5/3 * * * * echo `date` >> /vagrant/hoge/log7.log
10-20 * * * * echo `date` >> /vagrant/hoge/log8.log
10-20/1 * * * * echo `date` >> /vagrant/hoge/log9.log
10-20/3 * * * * echo `date` >> /vagrant/hoge/log10.log
10,20 * * * * echo `date` >> /vagrant/hoge/log11.log
10,20/2 * * * * echo `date` >> /vagrant/hoge/log12.log
出力データ
crontab登録直後から1分ごと
* * * * * echo `date` >> /vagrant/hoge/log1.log
vagrant@vagrant:/vagrant/hoge$ cat log1.log
Fri Oct 5 05:40:01 UTC 2018
Fri Oct 5 05:41:01 UTC 2018
Fri Oct 5 05:42:01 UTC 2018
:
Fri Oct 5 07:20:01 UTC 2018
Fri Oct 5 07:21:01 UTC 2018
Fri Oct 5 07:22:01 UTC 2018
crontab登録直後から1分ごと(/n
指定)
*/1 * * * * echo `date` >> /vagrant/hoge/log2.log
vagrant@vagrant:/vagrant/hoge$ cat log2.log
Fri Oct 5 05:40:01 UTC 2018
Fri Oct 5 05:41:01 UTC 2018
Fri Oct 5 05:42:01 UTC 2018
:
Fri Oct 5 07:20:01 UTC 2018
Fri Oct 5 07:21:01 UTC 2018
Fri Oct 5 07:22:01 UTC 2018
crontab登録直後から3分ごと
*/3 * * * * echo `date` >> /vagrant/hoge/log3.log
vagrant@vagrant:/vagrant/hoge$ cat log3.log
Fri Oct 5 05:42:01 UTC 2018
Fri Oct 5 05:45:01 UTC 2018
Fri Oct 5 05:48:01 UTC 2018
:
Fri Oct 5 07:15:01 UTC 2018
Fri Oct 5 07:18:01 UTC 2018
Fri Oct 5 07:21:01 UTC 2018
- 3で割り切れる分から実行している
毎時0分に1分ごと
0/1 * * * * echo `date` >> /vagrant/hoge/log4.log
vagrant@vagrant:/vagrant/hoge$ cat log4.log
Fri Oct 5 06:00:01 UTC 2018
Fri Oct 5 07:00:01 UTC 2018
- 毎時0分のみ実行
毎時0分に3分ごと
0/3 * * * * echo `date` >> /vagrant/hoge/log5.log
vagrant@vagrant:/vagrant/hoge$ cat log5.log
Fri Oct 5 06:00:01 UTC 2018
Fri Oct 5 07:00:01 UTC 2018
- 毎時0分のみ実行
毎時5分に1分ごと
5/1 * * * * echo `date` >> /vagrant/hoge/log6.log
vagrant@vagrant:/vagrant/hoge$ cat log6.log
Fri Oct 5 06:05:01 UTC 2018
Fri Oct 5 07:05:01 UTC 2018
- 毎時5分のみ実行
毎時5分に3分ごと
5/3 * * * * echo `date` >> /vagrant/hoge/log7.log
vagrant@vagrant:/vagrant/hoge$ cat log7.log
Fri Oct 5 06:05:01 UTC 2018
Fri Oct 5 07:05:01 UTC 2018
- 毎時5分のみ実行
毎時10分〜20分まで毎分
10-20 * * * * echo `date` >> /vagrant/hoge/log8.log
vagrant@vagrant:/vagrant/hoge$ cat log8.log
Fri Oct 5 06:10:01 UTC 2018
Fri Oct 5 06:11:01 UTC 2018
Fri Oct 5 06:12:01 UTC 2018
:
Fri Oct 5 06:18:01 UTC 2018
Fri Oct 5 06:19:01 UTC 2018
Fri Oct 5 06:20:01 UTC 2018
Fri Oct 5 07:10:01 UTC 2018
Fri Oct 5 07:11:01 UTC 2018
Fri Oct 5 07:12:01 UTC 2018
:
Fri Oct 5 07:18:01 UTC 2018
Fri Oct 5 07:19:01 UTC 2018
Fri Oct 5 07:20:01 UTC 2018
毎時10分〜20分まで毎1分ごと
10-20/1 * * * * echo `date` >> /vagrant/hoge/log9.log
vagrant@vagrant:/vagrant/hoge$ cat log9.log
Fri Oct 5 06:10:01 UTC 2018
Fri Oct 5 06:11:01 UTC 2018
Fri Oct 5 06:12:01 UTC 2018
:
Fri Oct 5 06:18:01 UTC 2018
Fri Oct 5 06:19:01 UTC 2018
Fri Oct 5 06:20:01 UTC 2018
Fri Oct 5 07:10:01 UTC 2018
Fri Oct 5 07:11:01 UTC 2018
Fri Oct 5 07:12:01 UTC 2018
:
Fri Oct 5 07:18:01 UTC 2018
Fri Oct 5 07:19:01 UTC 2018
Fri Oct 5 07:20:01 UTC 2018
毎時10分〜20分まで3分ごと
10-20/3 * * * * echo `date` >> /vagrant/hoge/log10.log
vagrant@vagrant:/vagrant/hoge$ cat log10.log
Fri Oct 5 06:10:01 UTC 2018
Fri Oct 5 06:13:01 UTC 2018
Fri Oct 5 06:16:01 UTC 2018
Fri Oct 5 06:19:01 UTC 2018
Fri Oct 5 07:10:01 UTC 2018
Fri Oct 5 07:13:01 UTC 2018
Fri Oct 5 07:16:01 UTC 2018
Fri Oct 5 07:19:01 UTC 2018
- 10分から3分刻み
毎時10分と20分に実行
10,20 * * * * echo `date` >> /vagrant/hoge/log11.log
vagrant@vagrant:/vagrant/hoge$ cat log11.log
Fri Oct 5 06:10:01 UTC 2018
Fri Oct 5 06:20:01 UTC 2018
Fri Oct 5 07:10:01 UTC 2018
Fri Oct 5 07:20:01 UTC 2018
毎時10分と、20分を3分刻みに実行
10,20/3 * * * * echo `date` >> /vagrant/hoge/log12.log
vagrant@vagrant:/vagrant/hoge$ cat log12.log
Fri Oct 5 06:10:01 UTC 2018
Fri Oct 5 06:20:01 UTC 2018
Fri Oct 5 07:10:01 UTC 2018
Fri Oct 5 07:20:01 UTC 2018
- 10分と20分のみ実行
追加検証
0分から59分まで毎分
0-59 * * * * echo `date` >> /vagrant/hoge/log13.log
vagrant@vagrant:/vagrant/hoge$ cat log13.log
Fri Oct 5 07:36:01 UTC 2018
Fri Oct 5 07:37:01 UTC 2018
Fri Oct 5 07:38:01 UTC 2018
- 次の時の0分から始まると予想したが、cron開始直後から実行していた
まとめ
- 実行開始は各分の1秒に開始している(本当は0秒かも?)
-
*/n
を入れると、nで割り切れる分(0,3,6,9,12...分)から計測開始 -
10-20/n
を入れると、10分から計測開始 - 分を特定の値でしめしているときは
/n
を指定しても無視される - 5時0分より毎分、という処理をcrontabで登録しようとすると、4時59分にcrontabを更新しないといけない
補遺:指定時間からの実行はできるのか?
- cronを1行で済ませるのは不可能
- 開始時刻を指定できない
例:その日の15時から、毎分ごとの処理をcronさせたい場合
- 14時30分に指定すると仮定
* 15-23 * * * 処理
#* 0-14 * * * 処理
- 15時を過ぎたら2行目のコメントアウトを外す
- 行が増えるが安全確実