alltools.one
DevOps
2026-02-25
11 min
alltools.one Team
cronschedulingdevopsautomationlinux

Cronジョブ式チートシート — プロのようにスケジューリング

CronはUnix系システムにおけるスケジュールタスク自動化の基盤です。ログのローテーション、データベースのバックアップ実行、CI/CDパイプラインのトリガーなど、cron式はそれらのジョブがいつ実行されるかを定義します。構文はコンパクトですが強力で、当て推量では間違えやすいものです。

このリファレンスでは、cron構文のすべての要素を実践的なコピー&ペースト可能な例と共に解説します。インタラクティブに式を構築・検証したい場合は、このガイドと一緒にCron式ビルダーを開いてください。

Cron構文:5つのフィールド

標準的なcron式は、スペースで区切られた5つのフィールドで構成されます:

┌───────────── 分 (0–59)
│ ┌───────────── 時 (0–23)
│ │ ┌───────────── 日 (1–31)
│ │ │ ┌───────────── 月 (1–12)
│ │ │ │ ┌───────────── 曜日 (0–7、0と7は日曜日)
│ │ │ │ │
* * * * *

各フィールドは特定の値、範囲、リスト、またはワイルドカードを受け入れます。5つのフィールドが合わさって、正確な繰り返しスケジュールを指定します。

フィールド許容値特殊文字
0–59* , - /
0–23* , - /
1–31* , - /
1–12* , - /
曜日0–7* , - /

月と曜日のフィールドは、ほとんどの実装で3文字の略語(JANDECSUNSAT)も受け入れます。

特殊文字の解説

4つの特殊文字を理解すれば、cronの全機能を引き出せます:

アスタリスク * — 「すべて」

そのフィールドのすべての可能な値に一致します。

* * * * *    # 毎日、毎時、毎分実行

カンマ , — 「および」

離散値のリストを指定します。

0 9,12,18 * * *    # 毎日9:00、12:00、18:00に実行

ハイフン - — 「から…まで」

包括的な範囲を定義します。

0 9-17 * * *    # 9時から17時まで毎時実行

スラッシュ / — 「n番目ごと」

範囲の先頭からのステップ間隔を設定します。

*/10 * * * *    # 10分ごと(0, 10, 20, 30, 40, 50)

範囲とステップを組み合わせることもできます:

0 9-17/2 * * *    # 9時から17時まで2時間ごと(9, 11, 13, 15, 17)

よく使うCronスケジュール例

このテーブルをブックマークしてください。繰り返し使うスケジュールです。

スケジュール説明
毎分* * * * *毎分の冒頭に実行
5分ごと*/5 * * * *0, 5, 10, 15, …, 55分
15分ごと*/15 * * * *0, 15, 30, 45分
毎時0 * * * *毎時0分に実行
6時間ごと0 */6 * * *00:00, 06:00, 12:00, 18:00
毎日深夜0時0 0 * * *1日1回、00:00に実行
毎日午前3時0 3 * * *1日1回、03:00に実行
毎週月曜9時0 9 * * 1毎週月曜日09:00に実行
平日毎朝8時0 8 * * 1-5月曜日から金曜日の08:00
週末正午0 12 * * 0,6土曜日と日曜日の12:00
毎月1日0 0 1 * *毎月1日の深夜0時
四半期ごと(1,4,7,10月)0 0 1 1,4,7,10 *四半期月の1日深夜0時
営業時間中15分ごと*/15 9-17 * * 1-5平日9時〜17時、15分ごと

任意の式をCron式ビルダーに貼り付けて、次の実行時刻を視覚化できます。

高度なパターン

リストと範囲の組み合わせ

フィールドは混合構文を受け入れます。平日の8時と18時にジョブを実行するには:

0 8,18 * * 1-5

ステップで特定の月を指定するには:

0 0 1 1-12/3 *    # 1月から3ヶ月ごと(1月, 4月, 7月, 10月)

日と曜日の関係

日と曜日の両方が設定されている場合(*ではない場合)、動作は実装によって異なります。標準cronでは、いずれかの条件が満たされた場合にジョブが実行されます。ANDではなくORの関係です。これは多くの人を驚かせます。

0 0 15 * 1    # 15日と毎週月曜日に実行 — 「15日の月曜日」ではない

起動時の実行

cron式そのものではありませんが、@rebootは広くサポートされているショートカットです:

@reboot /usr/local/bin/start-service.sh

その他の一般的なショートカット:

ショートカット同等の式
@yearly0 0 1 1 *
@monthly0 0 1 * *
@weekly0 0 * * 0
@daily0 0 * * *
@hourly0 * * * *

異なる環境でのCron

5フィールド構文は普遍的ですが、cronの設定方法はプラットフォームによって異なります。

Linux Crontab

定番です。crontab -eでユーザーcrontabを編集します:

# 毎日午前2時にバックアップを実行
0 2 * * * /home/user/scripts/backup.sh >> /var/log/backup.log 2>&1

/etc/cron.d/のシステム全体のcronジョブには、ユーザーフィールドが追加されます:

0 2 * * * root /usr/local/bin/cleanup.sh

GitHub Actions

GitHub Actionsはscheduleトリガー内で同じ5フィールド構文を使用します。すべての時刻はUTCです。

on:
  schedule:
    - cron: '0 3 * * 1-5'   # 平日UTC3時

YAML設定の詳細については、Kubernetes向けYAMLDocker Compose向けYAMLを参照してください。

Kubernetes CronJob

KubernetesはCron式をCronJobリソースでラップします:

apiVersion: batch/v1
kind: CronJob
metadata:
  name: nightly-report
spec:
  schedule: "0 2 * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - name: report
              image: reporting:latest
              command: ["python", "generate_report.py"]
          restartPolicy: OnFailure

KubernetesはデフォルトでUTCを使用します。v1.25以降、CronJobスペックでtimeZone: "America/New_York"を設定できます。

AWS CloudWatch (EventBridge)

AWSは6フィールド(秒を追加)とrate() / cron()ラッパーを使用する、やや異なる構文を使います:

cron(0 3 * * ? *)    # 毎日UTC3時

?文字に注意 — AWSでは、一方が指定されている場合、日または曜日のいずれかに?が必要です。これは標準cronとは異なります。

よくある落とし穴

1. タイムゾーンの混乱

CronはLinuxではシステムのタイムゾーンをデフォルトで使用しますが、KubernetesとGitHub ActionsはUTCで動作します。0 9 * * *でスケジュールされたジョブはUTC9時に起動し、日本時間では18時になります。

スケジューラーがどのタイムゾーンを使用するか必ず確認してください。タイムスタンプ変換については、Unixタイムスタンプ解説ガイドがUTCオフセットを詳しく説明しています。

2. 実行の重複

ジョブが実行間隔よりも長くかかる場合、重複したインスタンスが発生します。*/5 * * * *スケジュールで8分かかるスクリプトは積み上がります。

解決策:

  • ロックファイルを使用する(Linuxのflock
  • KubernetesのCronJobでconcurrencyPolicy: Forbidを設定する
  • スクリプトの先頭で実行中のインスタンスを確認する

3. 出力の欠落とデバッグ

Cronはデフォルトではstdoutをキャプチャしません。常に出力をリダイレクトしてください:

*/5 * * * * /path/to/script.sh >> /var/log/myjob.log 2>&1

cronジョブが実行されない場合、確認事項:

  • grep CRON /var/log/syslogで実行ログを確認
  • スクリプトのファイルパーミッション
  • PATH環境変数 — cronはデフォルトで最小限のPATHを持つ

4. 「毎月31日」の罠

0 0 31 * *    # 31日がある月のみ実行

これは1月、3月、5月、7月、8月、10月、12月に実行されますが、残りの5ヶ月は静かにスキップされます。月末ジョブが必要な場合は、1日に実行してスクリプトロジックを調整するか、「月の最終日」セマンティクスをサポートするツールを使用することを検討してください。

5. Crontabの末尾の改行を忘れる

一部のcron実装では、crontabファイルの末尾に改行が必要です。最後のエントリが実行されない場合は、末尾に空行を追加してください。

視覚的に式を構築する

構文の暗記は一般的なパターンには有効ですが、複雑なスケジュールは視覚的に構築する方が簡単です。alltools.oneのCron式ビルダーでは:

  • ドロップダウンで各フィールドの値を選択
  • スケジュールの人間が読める説明を表示
  • 今後の実行時刻をプレビュー
  • ワンクリックで最終式をコピー

完全にブラウザ内で動作し、データはサーバーに送信されません。

クイックリファレンスカード

このブロックをプロジェクトドキュメントやチームWikiにコピーしてください:

# ┌───── 分 (0-59)
# │ ┌───── 時 (0-23)
# │ │ ┌───── 日 (1-31)
# │ │ │ ┌───── 月 (1-12)
# │ │ │ │ ┌───── 曜日 (0-7, 日=0または7)
# │ │ │ │ │
# * * * * *

*/5 * * * *        # 5分ごと
0 * * * *          # 毎時
0 0 * * *          # 毎日深夜0時
0 9 * * 1-5        # 平日9時
0 0 1 * *          # 毎月1日
*/15 9-17 * * 1-5  # 営業時間中15分ごと

さらに読む


次のcron式を構築する準備はできましたか?**Cron式ビルダー**を開いて、最初から正しくスケジュールを設定しましょう。

Published on 2026-02-25
Cron Expression Cheat Sheet — Schedule Like a Pro | alltools.one