LoginSignup
2
1

More than 5 years have passed since last update.

cronの動作についていろいろ検証してみた

Last updated at Posted at 2018-10-05

はじめに

今日、仕事絡みで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行目のコメントアウトを外す
    • 行が増えるが安全確実
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1