cronで「隔週」「第2月曜」を指定する方法と限界
最終更新: 2026-07-19
「隔週の月曜」「毎月第2月曜」——一見ありそうな指定ですが、標準のcronでは直接は書けません。cronの曜日指定は「週の何曜日か」しか表せず、「何週目か」「奇数週か」の概念を持たないためです。この記事で現実的な回避策を紹介します。
なぜ直接書けないのか
cronの5フィールドは「分・時・日・月・曜日」だけ。週番号や「隔週」の状態を保持できません。*/2を曜日に使っても「隔週」にはならず、単に一部の曜日番号にマッチするだけです。
回避策1: dateコマンドで判定する(Linux標準cron)
毎週その曜日に起動し、スクリプト側で「今日が第何週か」を判定して実行を絞ります。
# 毎週月曜9時に起動し、第2月曜のときだけ実行
0 9 * * 1 [ $(( ($(date +\%d) - 1) / 7 + 1 )) -eq 2 ] && /path/to/job.sh
# 隔週(ISO週番号が偶数の週)だけ実行
0 9 * * 1 [ $(( $(date +\%V) \% 2 )) -eq 0 ] && /path/to/job.sh※ crontabに直書きする場合、%は「\%」とエスケープが必要です(しないと%以降が標準入力扱いになります)。複雑になるならスクリプトに切り出すのが安全です。
回避策2: L・#が使えるプラットフォーム
AWS EventBridgeなどQuartz系の拡張が使える環境なら、#で「第n曜日」を直接書けます。例: 6#2=第2金曜。詳しくはAWS EventBridgeのcron式を参照してください。標準cronとは書式が異なる点に注意です。
まず素直な指定で試す
「毎週月曜」「毎月1日」といった素直な指定で足りないか、いま一度検討する価値もあります。cron式ツールで次回実行時刻を確認しながら、要件に合う最小の式を探しましょう。
曜日・日の指定を変えながら、次に実行される日時をその場で確認できます。
cron式を試す