てもとツール
技術解説

cron式の逆引き|毎週月曜9時・月末・第2月曜の書き方

毎週月曜9時は「0 9 * * 1」、平日9時は「0 9 * * 1-5」です。やりたい日時から cron 式を引ける一覧に加え、日と曜日を両方書くと「または」になる罠、月末・第2月曜・隔週のように式だけでは書けない条件の回り道、GitHub Actions の時刻が UTC になる点まで整理します。

公開読了目安 約6分

cron式の逆引き|毎週月曜9時・月末・第2月曜の書き方のアイキャッチ画像

この記事の要点

  • 毎週月曜9時は 0 9 * * 1、平日9時は 0 9 * * 1-5
  • 日と曜日を両方書くと「両方を満たす日」ではなく「どちらかの日」に動く
  • 月末・第2月曜・隔週は5つの欄だけでは書けず、コマンド側で日付を確かめる
  • */40 や日付の */7 は、月や時をまたぐと間隔がそろわない
  • GitHub Actions の schedule は既定で UTC なので、日本時間から9時間引く
目次

毎週月曜の 9 時に動かすなら 0 9 * * 1、平日の 9 時なら 0 9 * * 1-5 です。 cron 式は「分・時・日・月・曜日」の 5 つの欄を、半角スペースで区切って並べます。

ブログの予約処理やバックアップ、毎朝の集計メールなど、身近な自動処理の多くはこの式で時刻を決めています。 1 文字の書き違いで「月に 1 回のはずが毎日届く」こともあるので、書く前に引ける一覧と、式だけでは書けない条件を整理します。

5 つの欄の並びと、どの時計で動くか

欄は左から順に、分(0〜59)・時(0〜23)・日(1〜31)・月(1〜12)・曜日(0〜7)です。 曜日は 0 と 7 がどちらも日曜で、1 が月曜、6 が土曜にあたります。

* は「すべて」、, は列挙、- は範囲、/ は間隔を表します。 9-17 は 9 時と 17 時を含む範囲です。

時刻は、cron を動かすコンピューターの時計で決まります。 日本時間に合わせたサーバーなら日本時間で、UTC のままのサーバーやサービスなら UTC で読まれます。

やりたい日時から引く一覧

決まった日時に動かす式です。 時刻はすべて、cron を動かす側の時計の時刻です。

やりたいこと式
毎日 9:000 9 * * *
平日(月〜金)9:000 9 * * 1-5
毎週月曜 9:000 9 * * 1
土日 10:000 10 * * 0,6
毎月1日 0:000 0 1 * *
毎月1日と15日 6:000 6 1,15 * *
1・4・7・10月の1日 0:000 0 1 1,4,7,10 *
毎年1月1日 0:000 0 1 1 *

一定の間隔でくり返す式です。

やりたいこと式
5分ごと*/5 * * * *
毎時30分30 * * * *
2時間ごと(0時から)0 */2 * * *
平日9〜18時の毎時0分0 9-18 * * 1-5

1,4,7,10 は */3 と書いても同じ月になります。 */3 は 1 月から数えて 3 つおきなので、2・5・8・11 月にしたいときは 2-12/3 と範囲を書きます。

日と曜日を両方書くと「または」になる

よくある書き違いが、日の欄と曜日の欄を両方指定する形です。 「8〜14 日の月曜=第 2 月曜」のつもりで 0 9 8-14 * 1 と書くと、狙いどおりには動きません。

Debian の cron の説明書は、日と曜日の両方が * でないとき、どちらかに当てはまれば実行すると定めています。 0 9 8-14 * 1 は「毎月 8〜14 日の毎日」と「毎週月曜」を合わせた日に動きます。

2026 年 10 月 9 日の昼に、この式をcron 式の説明ツールへ入れてみました。 次の実行日は 10 月 10 日(土)・11 日(日)・12 日(月)…と並びます。

ツールも「日付と曜日の両方が指定されています。OR条件として扱います。」と注意を出します。

式だけでは書けない 3 つの条件

月末

月の最終日は、月によって 28〜31 日と変わります。 Debian の crontab の説明書には、月末を表す記号がありません。

回り道は 2 つあります。 1 つは、翌月 1 日の 0:00 に「前月ぶん」の処理として動かす方法です。

もう 1 つは、28〜31 日に毎日起動して、翌日が 1 日のときだけ本体を動かす方法です。 GNU の date コマンドがある環境なら、次のように書けます。

0 23 28-31 * * [ "$(date -d tomorrow +\%d)" = "01" ] && /path/to/job.sh

% の前の \ は省けません。 crontab のコマンド欄では、\ の無い % が改行に置き換わるためです。

第 2 月曜(第 n 何曜日)

第 2 月曜は、必ず 8〜14 日のどれかに来ます。 そこで日の欄だけを 8-14 にし、曜日はコマンド側で確かめます。

0 9 8-14 * * [ "$(date +\%u)" = "1" ] && /path/to/job.sh

date +%u は月曜を 1、日曜を 7 で返します。 第 1 なら 1-7、第 3 なら 15-21、第 4 なら 22-28 と、日の範囲だけを変えます。

隔週

「2 週間に 1 回」は、5 つの欄のどれでも表せません。 毎週動かして、コマンド側で週番号(date +%V の ISO 週番号)の偶数・奇数を見る方法があります。

ただし週番号は年をまたぐと 1 に戻ります。 2026 年は 53 週まであるので、53 週(奇数)の翌週は 2027 年の 1 週(奇数)です。

奇数週に動かす設定では、年末年始に 2 週続けて実行されます。 年をまたいでもそろえたいときは、決めた基準日からの経過日数を 14 で割った余りで判定します。

間隔の「/」がそろわない場面

/ は、範囲の先頭から数えて n おきの値を選ぶ記号です。 「前回の実行から n 分後」ではないので、割り切れない間隔では間があきます。

  • */40 * * * *: 毎時 0 分と 40 分に動きます。間隔は 40 分と 20 分の交互です
  • 0 0 */7 * *: 毎月 1・8・15・22・29 日に動きます。10 月 29 日の次は 11 月 1 日で、3 日しか空きません
  • */30 9-17 * * 1-5: 17 時台も範囲に入るので、最後は 17:30 です

17:00 で止めたいなら、*/30 9-16 * * 1-5 と 0 17 * * 1-5 の 2 行に分けます。 40 分ごとのように 60 を割り切れない間隔は、1 行の式ではそろいません。

書く前に知っておきたい環境ごとの違い

曜日や月の名前は範囲にしない

曜日と月は MON や JAN のような 3 文字の名前でも書けます。 ただし Debian の説明書は、名前を範囲や列挙にすることを認めていません。

MON-FRI を受け付ける実装もありますが、1-5 と数字で書けばどちらでも同じ意味で読まれます。 曜日の範囲は数字で書くのが無難です。

GitHub Actions は既定で UTC

GitHub Actions の schedule は、既定では UTC で時刻を読みます。 日本時間は UTC より 9 時間進んでいるので、式の時は日本時間から 9 を引いた値にします。

日本時間の毎朝 9:00 は、UTC の 0:00 なので 0 0 * * * です。 日本時間の月曜 8:00 は UTC の日曜 23:00 になり、曜日まで 0 23 * * 0 とずれます。

timezone に Asia/Tokyo のような地域名を添えて、その地域の時刻で読ませる方法もあります。 最短の間隔は 5 分で、毎時 0 分のような混む時刻は実行が遅れたり、取りやめられたりすることがあると書かれています。

夏時間のある地域の時計

日本には今は夏時間が無いので、日本時間のサーバーでは時刻が飛びません。 夏時間のある地域の時計で動かすと、切り替えの日に 1 時間が飛んだり、くり返したりします。

Debian の cron は、3 時間未満の時計の変化を特別に扱います。 時刻を決めた処理のうち、飛んだ時刻のものは変化の直後に動かし、くり返した時刻のものはもう一度は動かしません。

UTC と日本時間、夏時間の関係は、UTCと日本時間の違いで詳しく扱っています。

書いた式を確かめる

式を書いたら、次の実行日時を並べて、狙った日だけが出るかを見ます。 cron 式の説明ツールは、式を日本語の説明に直し、次の実行日時を最大 10 件まで並べます。

ツールの次回実行は、開いているパソコンやスマホの時計で数えます。 UTC で動くサービス向けの式は、UTC に直した時刻で読み替えてください。

月末の L や第 n 曜日の # のように、一部のサービスだけが持つ記号はツールでは読めません。 入れると「値が不正です」と出るので、使えるかどうかはサービスの説明書で確かめます。

関連記事

まとめ

決まった日時なら、一覧の式を写して数字を差し替えれば足ります。 日と曜日を両方書くと「どちらかの日」になる点だけは、書いたあとに次の実行日で確かめてください。

月末・第 2 月曜・隔週は、式を広めに書いてコマンド側で日付を確かめます。 UTC で動く環境では、日本時間から 9 時間引いた時刻と、ずれた曜日で書き直します。

参考・出典

本記事は上記の公的機関・公式情報源を参考にしています。最新の情報は各リンク先をご確認ください。

あわせて読みたい

同じテーマ・関連ツールの記事です。