crontab: 正しい使い方と、一番左の危険なアイツ

crontab の実行日時指定で、「毎日3時」に実行させるつもりで

 * 3 * * *

と書いたりしていませんか*1


これは「毎日3時から3時59分まで一分おきに実行」の設定です。一番左の * (=「全ての分」=「0から59」) には注意しましょう。「毎日3時」だから「2カラム目を3」にするだけで大丈夫、と思って気を抜いてはいけません。当然、正しい設定は、

0 3 * * *

です。

参考

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 Sun, or use names)

A field may be an asterisk (*), 
which always stands for ``first-last''.

Ranges of numbers are allowed. 
Ranges are two numbers separated with a hyphen. 
The specified range is inclusive. 
For example, 8-11 for an ``hours'' entry 
specifies execution at hours 8, 9, 10 and 11. 

man 5 crontab - Linux Man Pages

分 時 日 月 曜日

43 23 * * *               23:43に実行
12 05 * * *             05:12に実行
0 17 * * *                17:00に実行
0 17 * * 1                毎週月曜の 17:00に実行
0,10 17 * * 0,2,3         毎週日,火,水曜の 17:00と 17:10に実行
0-10 17 1 * *             毎月 1日の 17:00から17:10まで 1分毎に実行
0 0 1,15 * 1              毎月 1日と 15日と 月曜日の 0:00に実行
42 4 1 * *              毎月 1日の 4:42分に実行
0 21 * * 1-6            月曜日から土曜まで 21:00に実行
0,10,20,30,40,50 * * * * 10分おきに実行
*/10 * * * *        10分おきに実行
* 1 * * *         1:00から 1:59まで 1分おきに実行
0 1 * * *         1:00に実行
0 */1 * * *        毎時 0分に 1時間おきに実行
0 * * * *         毎時 0分に 1時間おきに実行
2 8-20/3 * * *      8:02,11:02,14:02,17:02,20:02に実行
30 5 1,15 * *       1日と 15日の 5:30に実行

crontabの書き方

*1:私はやっていません。本当です。