cronの書き方をゼロから解説。毎日・毎時・毎週月曜・月末などよく使うパターンを表で網羅。crontab設定手順からGitHub Actions・Cloud Schedulerでの使い方まで実践的に紹介します。
使い方ガイド
公開: by ToolCraft Lab 約9分で読めます

cron式の書き方を完全解説 — 毎日・毎時・毎週のパターンを網羅【2026年版】

cronの書き方をゼロから解説。毎日・毎時・毎週月曜・月末などよく使うパターンを表で網羅。crontab設定手順からGitHub Actions・Cloud Schedulerでの使い方まで実践的に紹介します。

#cron#Linux#サーバー管理

cron式とは? — タスク自動実行のスケジュールを定義する記法

「毎日深夜3時にバックアップを実行したいけど、cron式の書き方がよく分からない…」 そんな悩みを解決します。この記事を読めば、どんなスケジュールでも自信を持ってcron式を書けるようになります。

cron(クロン)は、Unix系OSに標準搭載されているタスクスケジューラです。Dockerコンテナ内でのcron設定については「Docker Compose入門」も参考になります。cron式はそのスケジュールを「5つのフィールド」で表現する記法で、サーバー管理だけでなく、GitHub Actions や Cloud Scheduler など、さまざまなサービスで使われています。

cron式の基本構文

┌───────────── 分(0-59)
│ ┌───────────── 時(0-23)
│ │ ┌───────────── 日(1-31)
│ │ │ ┌───────────── 月(1-12)
│ │ │ │ ┌───────────── 曜日(0-7, 0と7は日曜)
│ │ │ │ │
* * * * *  コマンド

各フィールドの値の範囲

フィールド範囲特殊文字
0〜59* , - /
0〜23* , - /
1〜31* , - /
1〜12* , - /
曜日0〜7(0, 7 = 日曜)* , - /

特殊文字の意味と使い方

cron式では4種類の特殊文字を使ってスケジュールを柔軟に指定できます。

アスタリスク(*)— すべての値

そのフィールドのすべての値にマッチします。

# 毎分実行
* * * * *  /path/to/script.sh

カンマ(,)— 複数の値を指定

# 毎日 9時と18時に実行
0 9,18 * * *  /path/to/script.sh

ハイフン(-)— 範囲を指定

# 平日(月〜金)の9時に実行
0 9 * * 1-5  /path/to/script.sh

スラッシュ(/)— 間隔を指定

# 5分ごとに実行
*/5 * * * *  /path/to/script.sh

# 2時間ごとに実行
0 */2 * * *  /path/to/script.sh

よく使うcronパターン一覧

実務で頻繁に使うcron式をまとめました。コピペしてすぐ使えます。

基本パターン

スケジュールcron式説明
毎分* * * * *テスト用、本番では非推奨
毎時0分0 * * * *1時間ごとに実行
毎日0時0 0 * * *日次バッチ処理
毎日3時0 3 * * *深夜バックアップ
毎日9時と21時0 9,21 * * *1日2回実行

曜日パターン

スケジュールcron式説明
毎週月曜9時0 9 * * 1週次レポート
毎週金曜18時0 18 * * 5週末前の通知
平日9時0 9 * * 1-5営業日の日次タスク
土日10時0 10 * * 0,6休日のみ実行

月次・年次パターン

スケジュールcron式説明
毎月1日0時0 0 1 * *月次バッチ
毎月15日12時0 12 15 * *給与計算など
毎月最終日0 0 28-31 * *後述の注意あり
毎年1月1日0時0 0 1 1 *年次処理
四半期初日0 0 1 1,4,7,10 *四半期処理

間隔パターン

スケジュールcron式説明
5分ごと*/5 * * * *ヘルスチェック
10分ごと*/10 * * * *データ同期
15分ごと*/15 * * * *キャッシュ更新
30分ごと*/30 * * * *メール送信キュー
2時間ごと0 */2 * * *ログ収集
6時間ごと0 */6 * * *SSL証明書チェック

⚠️ 注意:「月末」の指定 標準のcron式には「月末」を直接指定する方法がありません。28-31 で指定すると、2月は28日(閏年は29日)に実行されますが、31日がない月でも31日を指定した行は単にスキップされます。正確な月末処理が必要な場合は、スクリプト内で日付チェックを行いましょう。


crontab の基本操作

crontabコマンド一覧

# 現在のcrontabを表示
crontab -l

# crontabを編集
crontab -e

# crontabを削除(注意!全件削除)
crontab -r

# 別ユーザーのcrontabを表示(root権限が必要)
sudo crontab -u username -l

crontabファイルの書き方

# crontab の例
# 環境変数の設定
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin
MAILTO=admin@example.com

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

# 毎時0分にヘルスチェック
0 * * * * /home/user/scripts/healthcheck.sh >> /var/log/health.log 2>&1

# 平日9時にレポート生成
0 9 * * 1-5 /home/user/scripts/report.sh

crontabの書き方のポイント

  • 出力のリダイレクト: >> /var/log/xxx.log 2>&1 でログを残す
  • MAILTO: メール通知先を設定(空にすると通知なし)
  • PATH: cron環境ではPATHが限定されるため、明示的に指定する
  • フルパス: コマンドやスクリプトはフルパスで記述する

GitHub Actions での cron スケジュール

GitHub Actions では schedule トリガーでcron式を使えます。GitHub Actionsの基本的な使い方は「GitHub Actions入門ガイド」で解説しています。

基本的な設定例

# .github/workflows/scheduled-task.yml
name: Scheduled Task

on:
  schedule:
    # 毎日UTC 0時 = JST 9時に実行
    - cron: '0 0 * * *'

jobs:
  run-task:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Run script
        run: |
          echo "Scheduled task running at $(date)"
          ./scripts/daily-task.sh

GitHub Actions でのcron注意点

注意点詳細
タイムゾーンUTC固定。JSTはUTC+9なので、JST 9時 = UTC 0時
実行遅延負荷状況により最大15分程度の遅延が発生する場合がある
最短間隔5分ごとが最短(*/5 * * * *
非アクティブリポジトリ60日間アクティビティがないと自動停止される

JSTとUTCの変換表

# JSTからUTCへの変換(JST - 9時間 = UTC)
# JST  0:00 → UTC 15:00 (前日)
# JST  3:00 → UTC 18:00 (前日)
# JST  9:00 → UTC  0:00
# JST 12:00 → UTC  3:00
# JST 18:00 → UTC  9:00
# JST 21:00 → UTC 12:00
# よく使うJST時刻でのGitHub Actions cron設定
on:
  schedule:
    # JST 毎日9時
    - cron: '0 0 * * *'
    # JST 毎日0時(深夜)
    - cron: '0 15 * * *'
    # JST 平日9時
    - cron: '0 0 * * 1-5'

Google Cloud Scheduler での cron

Google Cloud Scheduler は、タイムゾーンを直接指定できるのが大きなメリットです。

基本的な使い方

# Cloud Schedulerジョブの作成
gcloud scheduler jobs create http my-daily-job \
  --schedule="0 9 * * *" \
  --time-zone="Asia/Tokyo" \
  --uri="https://my-api.example.com/daily-task" \
  --http-method=POST \
  --location=asia-northeast1

Cloud Scheduler の特徴

  • タイムゾーン指定可能: Asia/Tokyo などIANAタイムゾーンで指定
  • リトライ設定: 失敗時の再試行を細かく設定可能
  • HTTP / Pub/Sub / App Engine: 複数のターゲットタイプに対応
  • 最短間隔: 1分ごとが最短
# Pub/Subトピックへの発行
gcloud scheduler jobs create pubsub my-pubsub-job \
  --schedule="*/10 * * * *" \
  --time-zone="Asia/Tokyo" \
  --topic=my-topic \
  --message-body='{"action": "sync"}' \
  --location=asia-northeast1

AWS EventBridge (CloudWatch Events) での cron

AWSでは EventBridge(旧 CloudWatch Events)でcron式を使いますが、書式が少し異なる点に注意が必要です。

AWS cron式の違い

AWS の cron式は 6フィールド(年を含む)で、曜日の指定方法も異なります。

┌───────────── 分(0-59)
│ ┌───────────── 時(0-23)
│ │ ┌───────────── 日(1-31)
│ │ │ ┌───────────── 月(1-12)
│ │ │ │ ┌───────────── 曜日(SUN-SAT または 1-7)
│ │ │ │ │ ┌───────────── 年(省略可)
│ │ │ │ │ │
* * * * * *

標準cronとAWS cronの比較

項目標準cronAWS cron
フィールド数56(年を含む)
曜日0-7(0,7=日曜)SUN-SAT または 1-7(1=日曜)
? の使用不可日または曜日で必須
L の使用不可月末日を指定可能
# AWS EventBridgeでの例

# 毎日JST 9時(UTC 0時)
cron(0 0 * * ? *)

# 平日JST 9時
cron(0 0 ? * MON-FRI *)

# 毎月最終日のJST 0時
cron(0 15 L * ? *)

cron式のデバッグとトラブルシューティング

よくあるトラブルと対処法

トラブル原因対処法
ジョブが実行されないPATHが通っていないcrontab内でPATHを明示する
実行されるが結果がおかしい環境変数が異なるスクリプト内で明示的にexportする
メールが大量に来る出力をリダイレクトしていない>> /dev/null 2>&1 を追加
意図しない時刻に実行されるタイムゾーンの認識違いTZ 環境変数を確認

デバッグ用のログ確認

# cronのシステムログを確認(Ubuntu/Debian)
grep CRON /var/log/syslog

# CentOS/RHEL の場合
grep CRON /var/log/cron

# macOS の場合
log show --predicate 'process == "cron"' --last 1h

スクリプトの動作確認テスプ

# cron環境を再現してテスト
env -i HOME=$HOME SHELL=/bin/bash PATH=/usr/bin:/bin /path/to/script.sh

# 実行権限の確認
ls -la /path/to/script.sh
chmod +x /path/to/script.sh

ToolCraft Lab の Cron ジェネレーター

cron式を手で書くのが不安な方は、当サイトの Cron ジェネレーター をご活用ください。

主な機能

  • ビジュアルUI: 「毎日」「毎時」「毎週」などをクリックで選ぶだけ
  • リアルタイムプレビュー: 次の実行日時を5件表示
  • マルチフォーマット対応: 標準cron、GitHub Actions、AWS EventBridge の書式を自動変換
  • コピーボタン: ワンクリックでクリップボードにコピー

ぜひ Cronジェネレーター をお試しください。


まとめ — cron式は5つのフィールドを覚えれば怖くない

cron式の基本は「分・時・日・月・曜日」の5フィールドです。この記事で紹介したパターン表をブックマークしておけば、ほとんどのスケジュール設定に対応できます。

覚えておくべきポイント
基本は5フィールド: 分 時 日 月 曜日
* はすべて、/ は間隔、, は複数、- は範囲
GitHub Actions は UTC 固定(JST - 9時間)
AWS EventBridge は6フィールドで書式が異なる
月末指定はスクリプト内で判定するのが確実

より複雑なワークフロースケジューリングが必要な場合は「n8n自動化ガイド」で紹介しているn8nも選択肢になります。cron式の作成に迷ったら、当サイトの Cronジェネレーター で簡単に生成できます。ビジュアルUIで直感的に操作でき、各プラットフォーム向けの書式に自動変換されるので、コピペするだけで使えます。