🛠️組み立てる
📅次回の実行日時
お使いのブラウザのタイムゾーン(—)で計算しています。 サーバー側のタイムゾーンが異なる場合は、その差を考慮してください。
書式の早見表
*- すべての値
5- その値のときだけ
1-5- 1から5まで
1,3,5- 1と3と5
*/10- 10おき(0,10,20…)
9-17/2- 9から17まで2おき
GUIで組み立てて、次回の実行日時を確かめてから設定する
お使いのブラウザのタイムゾーン(—)で計算しています。 サーバー側のタイムゾーンが異なる場合は、その差を考慮してください。
*51-51,3,5*/109-17/2cron式ジェネレーターは、定期実行のスケジュールを表すcron式を組み立て、その式が実際にいつ動くのかを確認できるツールです。次回の実行日時を5件先まで表示するので、設定してから「思っていた時刻に動かない」と気づく事態を防げます。
cron式は「分 時 日 月 曜日」の5つを空白で区切って書きます。0 3 * * * なら毎日3時0分、*/15 9-18 * * 1-5 なら平日の9時から18時まで15分おきです。書式自体は単純ですが、「日」と「曜日」を同時に指定したときの挙動など、直感に反する部分があります。
このツールは日本語で意味を説明し、書式に誤りがあればその場で指摘します。crontabに貼り付ける行の生成にも対応しています。
どちらか一方に一致すれば実行されます。たとえば 0 0 1 * 1 は「毎月1日」と「毎週月曜」の両方で動きます。「1日が月曜のときだけ」という意味にはなりません。両方を絞りたい場合は、cron側では表現できないため、スクリプトの冒頭で日付を判定してください。この挙動はVixie cron由来で、多くのcron実装が踏襲しています。
*/5 は「5分ごと」で合っていますか?分のフィールドなら0,5,10…55分に実行されるので、実質5分おきです。ただしこれは「0分を起点に5で割り切れる分」という意味で、「前回の実行から5分後」ではありません。時をまたぐときにずれないのはこのためです。なお 10-50/15 のように範囲と組み合わせると、10,25,40分になります。
はい。多くの実装で0と7の両方が日曜として扱われます。このツールも同じ解釈です。SUN・MON のような英語3文字での指定にも対応しています。
標準のcronは分単位までです。秒を含む6フィールドの形式は、Spring や node-cron など一部の実装が独自に拡張したものです。このツールは標準の5フィールドを前提としています。
ブラウザの設定(日本なら日本時間)で計算しています。サーバーのタイムゾーンがUTCになっていることは多いので、実際に設定する前に date コマンドなどでサーバー側の時刻を確認してください。
0 0 30 2 * のように存在しない日を指定するとどうなりますか?2月30日は存在しないため、永久に実行されません。このツールでは「今後5年以内に該当する日時がありません」と表示されるので、設定前に気づけます。
cronが実行するシェルは、ログインシェルとは環境変数が異なります。PATHが最小限しか設定されていないため、コマンドは /usr/bin/php のように絶対パスで書くのが確実です。また % はcrontab内では改行として解釈される特殊文字なので、コマンドに含める場合は \% とエスケープしてください。日付フォーマットで date +%Y%m%d と書いて動かない原因はほぼこれです。
cronは標準出力と標準エラー出力をメールで送ろうとします。メールが設定されていない環境では出力が失われるため、>> /var/log/mybatch.log 2>&1 のようにログへ書き出しておくと、動いたかどうかを後から追えます。