crontabとは?

crontabは、Linux/macOSで定期的にコマンドを自動実行するための仕組みです。「毎日朝9時にバックアップを取る」「5分ごとにログを確認する」といったタスクを自動化できます。

crontabの「cron」は時間の神クロノス(Chronos)に由来し、「tab」はテーブル(表)の略です。

cron式の基本構文

cron式は5つのフィールドで構成されます:

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

特殊文字

文字意味
*すべての値* * * * * = 毎分
,複数指定0,30 * * * * = 0分と30分
-範囲指定9-17 * * * * = 9時〜17時
/間隔指定*/5 * * * * = 5分ごと

コピペで使えるcron式一覧

やりたいことcron式
毎分実行* * * * *
5分ごと*/5 * * * *
15分ごと*/15 * * * *
30分ごと*/30 * * * *
毎時0分0 * * * *
2時間ごと0 */2 * * *
毎日0時0 0 * * *
毎日9時0 9 * * *
毎日9時と21時0 9,21 * * *
平日の毎朝9時0 9 * * 1-5
毎週月曜9時0 9 * * 1
毎週日曜0時0 0 * * 0
毎月1日0時0 0 1 * *
毎月1日と15日0 0 1,15 * *
平日9-18時の毎時0 9-18 * * 1-5

これらのcron式はcron式ビルダーでGUIから簡単に生成することもできます。次回実行日時のプレビュー機能もあります。

crontabの操作コマンド

設定を編集する

crontab -e

初回はエディタの選択を求められます。nanoが初心者にはおすすめです。

現在の設定を確認する

crontab -l

設定を削除する(注意)

crontab -r

警告: -r は全ての設定を削除します。-e と打ち間違えないように注意してください。

実践例

例1: 毎日3時にバックアップスクリプトを実行

0 3 * * * /home/user/scripts/backup.sh >> /var/log/backup.log 2>&1
  • >> /var/log/backup.log — 出力をログファイルに追記
  • 2>&1 — エラー出力も同じログに記録

例2: 5分ごとにヘルスチェック

*/5 * * * * curl -s https://example.com/healthcheck > /dev/null

例3: 平日9時にSlack通知

0 9 * * 1-5 /home/user/scripts/slack-notify.sh

例4: 毎月1日にレポート生成

0 0 1 * * python3 /home/user/scripts/monthly-report.py

crontabが動かない時のチェックリスト

1. パスが通っているか

cronは最小限の環境変数で実行されます。which python3 で確認したフルパスを使いましょう。

# NG
*/5 * * * * python3 script.py

# OK
*/5 * * * * /usr/bin/python3 /home/user/script.py

2. 実行権限があるか

chmod +x /home/user/scripts/backup.sh

3. ログを確認する

# Ubuntu/Debian
grep CRON /var/log/syslog

# CentOS/RHEL
cat /var/log/cron

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

4. 改行が入っているか

crontabファイルの最後に空行が必要な環境があります。エディタで末尾に改行を入れましょう。

5. 環境変数を設定する

crontabの先頭で環境変数を設定できます:

SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin
MAILTO=admin@example.com

0 9 * * * /home/user/scripts/daily.sh

cronの代替手段

ツール用途特徴
crontab定期実行標準搭載、シンプル
systemd timer定期実行ログ管理が優秀、依存関係対応
at1回限りの予約実行指定日時に1回だけ実行
GitHub ActionsCI/CDcron式でワークフロー実行可能
node-cronNode.jsアプリ秒単位の指定が可能

まとめ

  • cron式は「分 時 日 月 曜日」の5フィールド
  • *(全て)、*/n(n間隔)、n-n(範囲)、n,n(リスト)が使える
  • 動かない時はパス、権限、ログをチェック
  • cron式ビルダーを使えばGUIで簡単にcron式を生成できます