Toolyard

cron式とは?

5つのフィールド

cron式は空白で区切った5つのフィールドでできていて、スケジューラーにタスクをいつ実行するかを伝えます。左から順に:

分0-59
時0-23
日1-31
月1-12
曜日0-6(日曜 = 0)

現在の時刻がすべてのフィールドに一致したときに、タスクが実行されます。

特殊文字

  • * すべての値。
  • , リスト: 1,15は1日と15日。
  • - 範囲: 最後のフィールドの1-5は月曜から金曜。
  • / 間隔: 分のフィールドの*/10は10分ごと。

よく使うスケジュール

*/5 * * * *5分ごと
0 * * * *毎時0分
0 0 * * *毎日0時
30 8 * * 1-5平日の8時30分
0 0 1 * *毎月1日の0時
0 3 * * 0毎週日曜の3時

どんな式でもcron式の解説に貼り付けると、意味を言葉で読めて、次の実行日時もわかります。

よくある落とし穴

  • タイムゾーン: cronはサーバーの時計を使い、多くの場合UTCです。日本時間の9時に動かすなら、UTCでは0時です。
  • 日と曜日の両方: 両方を指定すると、どちらかに一致すれば実行されます。両方に一致したときではありません。
  • 秒: 標準のcronには秒のフィールドがありません。QuartzやSpringなど一部のシステムは先頭に秒を加え、6つのフィールドになります。

見た目どおりに動かない式

式意図実際の実行
0 9 1-7 * 1第1月曜の9:00毎月1〜7日の9:00と、毎週月曜の9:00
*/15 9-17 * * 1-59時〜17時に15分ごと平日の9:00〜17:45。17時台も含む
0 0 31 * *毎月末日31日がある7つの月だけ
0 0 29 2 *年1回うるう年だけ

第1月曜に動かしたいなら、1〜7日に実行してスクリプトの中で曜日を確かめます。

省略記法

多くのcronは別名を受け付けます。@hourly、@daily、@weekly、@monthly、@yearly、そして起動時に1回だけ実行する @reboot です。

夏時間

日本には夏時間がありませんが、夏時間のある国の現地時刻で動くサーバーでは、1:00〜3:00に設定したジョブが時計を進める夜に飛ばされたり、戻す夜に2回実行されたりします(cronの実装によります)。大事なジョブはその時間帯を避けるか、サーバーをUTCで運用しましょう。

このガイドで使うツール

その他のガイド