crontab
と anacrontab
はどちらもスケジュールされたタスクを自動的に実行するための仕組みを提供しますが、設計目的と動作の仕組みが異なります。以下にその違いを詳しく説明します。
1. crontab
の特徴
- 目的: 指定した時刻にタスクを実行する。
- 動作の前提: システムが指定した時間に起動している必要がある。
-
動作の仕組み:
-
crond
デーモンがバックグラウンドで動作し、指定された時刻にタスクを実行。 - タスクが指定時刻に実行されなかった場合(例: システムがシャットダウンされていた場合)、そのタスクはスキップされる。
-
-
設定ファイル:
- ユーザーごとの
crontab
ファイル(crontab -e
で編集)。 - システム全体のスケジュールは
/etc/crontab
や/etc/cron.d/
に配置される。
- ユーザーごとの
-
スケジュール指定:
分 時 日 月 曜日 コマンド
例: 毎日午前3時にスクリプトを実行0 3 * * * /path/to/script.sh
-
使用場面:
- 時間単位、日単位などの定期タスクを正確に実行したい場合。
2. anacrontab
の特徴
- 目的: システムが指定された時間に起動していなくても、タスクが確実に実行されるようにする。
- 動作の前提: システムが再び起動したときに未実行のタスクを実行する。
-
動作の仕組み:
-
anacron
デーモンがシステム起動時に未実行のタスクを確認し、実行する。 - タスクが「最後に実行されてからの経過日数」を基に実行を管理。
-
-
設定ファイル:
- システム全体の設定は
/etc/anacrontab
に記述。
- システム全体の設定は
-
スケジュール指定:
頻度(単位: 日) 遅延 実行識別子 コマンド
例: 毎日スクリプトを実行1 5 daily-job /path/to/script.sh
-
1
: 1日ごとに実行。 -
5
: システム起動後5分の遅延を挟む。 -
daily-job
: タスク識別名。
-
-
使用場面:
- システムが24時間稼働していない環境(例: デスクトップPCやラップトップ)で、定期タスクを確実に実行したい場合。
主な違い
特徴 | crontab | anacrontab |
---|---|---|
目的 | 時刻指定でタスクを正確に実行実行 | 漏れのないタスク管理 |
前提 | 指定時刻にシステムが稼働している必要 | システムが一時的に停止していても対応 |
対象 | サーバーのような常時稼働環境 | デスクトップやラップトップなどの非常時稼働環境 |
単位 | 分単位で指定可能 | 日単位で指定 |
スケジュール漏れ | スキップされる | 次回の起動時に実行 |
設定ファイル | /etc/crontab, crontab -e | /etc/anacrontab |
使い分けの例
1. crontab
を使う場合
- システムが常時稼働している場合。
- 時刻指定が重要な場合(例: 毎日午前2時にログローテーションを実行)。
2. anacrontab
を使う場合
- ノートPCのように夜間はシャットダウンされる場合。
- タスクを確実に実行したい場合(例: 毎日バックアップスクリプトを実行)。
併用のポイント
多くのLinuxディストリビューションでは、cron
とanacron
が共存しています。例えば、cron.daily
, cron.weekly
, cron.monthly
ディレクトリに配置されたタスクがanacron
経由で実行されることが多いです。これにより、常時稼働の環境でも稼働時間の限られた環境でもタスク管理が柔軟に行えます。