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 | 定期実行 | ログ管理が優秀、依存関係対応 |
| at | 1回限りの予約実行 | 指定日時に1回だけ実行 |
| GitHub Actions | CI/CD | cron式でワークフロー実行可能 |
| node-cron | Node.jsアプリ | 秒単位の指定が可能 |
まとめ
- cron式は「分 時 日 月 曜日」の5フィールド
*(全て)、*/n(n間隔)、n-n(範囲)、n,n(リスト)が使える- 動かない時はパス、権限、ログをチェック
- cron式ビルダーを使えばGUIで簡単にcron式を生成できます