# cron と crontab

> cron がどのようにスケジュールされたジョブを実行するか、crontab の5つの時間フィールド、システム cron ファイルの場所、および systemd タイマーとの比較について解説します。

cron は、スケジュールに従ってコマンドを実行する古典的な Unix デーモンです。各ユーザーは crontab -e で編集する crontab を持ち、各行には5つの時間フィールド（分、時、日、月、曜日）とそれに続くコマンドが記述されます。システムジョブは /etc/crontab および /etc/cron.d/ に配置されます。

## 時間フィールド

'30 2 * * *' は毎日 02:30 を意味し、'*/10 * * * *' は10分ごと、'0 9 * * 1' は毎週月曜日の 09:00 を意味します。曜日の 0 と 7 は日曜日です。

## システムファイル

/etc/cron.d/ および /etc/crontab 内のファイルには、時間とコマンドの間にユーザー名という追加のフィールドがあります。/etc/cron.daily のようなディレクトリには、1日1回実行されるスクリプトが格納されています。

## よくある落とし穴

cron は最小限の環境で実行されます。フルパスを使用するか、crontab 内で PATH を設定してください。出力は所有者にメール送信されるか破棄されるため、ログファイルにリダイレクトしてください。% 文字は crontab 行内で特別な意味を持つため、\% としてエスケープする必要があります。

## systemd タイマー

systemd を採用しているディストリビューションでは、.timer ユニットが代替手段となります。これにはジャーナルへのログ記録、ランダムな遅延、および実行されなかったジョブの補完（Persistent=true）といった機能があります。

## 日次ジョブの追加方法

1. crontab を開く: crontab -e
2. 行を追加する（例）: 30 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
3. 保存して終了する。cron は自動的に変更を反映します。
4. ジョブの一覧を表示する: crontab -l

## 注意点

- 'crontab -r' は確認なしで crontab 全体を削除します。
- スケジュールする前に、同じユーザーで手動でコマンドをテストしてください。

## 出典

- [crontab(5)](https://man7.org/linux/man-pages/man5/crontab.5.html)
- [crontab(5) (Debian)](https://manpages.debian.org/bookworm/cron/crontab.5.en.html)
- [systemd.timer(5)](https://man7.org/linux/man-pages/man5/systemd.timer.5.html)

最終更新: 2026-10-08
URL: https://raincleaner.eu/ja/wiki/linux/cron
