Anacron は、デスクトップおよびラップトップ用の cron です。
Anacron は、システムがサーバーのように 24 時間 365 日稼働していることを想定していません。
24 x 7 を実行していないマシンでバックグラウンド ジョブを自動的に実行する場合は、anacron を使用する必要があります。
たとえば、通常の cron ジョブとして毎日午後 11 時にスケジュールされたバックアップ スクリプトがあり、ラップトップが午後 11 時に起動していない場合、バックアップ ジョブは実行されません。
ただし、同じジョブが anacron でスケジュールされている場合は、ラップトップが再起動すると確実に実行されます。
アナクロンタブ形式
cron に /etc/crontab があるように、anacron には /etc/anacrontab があります。
/etc/anacrontab ファイルには、次の形式で記述された anacron ジョブが含まれています。
period delay job-identifier command
フィールド 1 は繰り返し期間です: これは、日数を指定する数値です。
- 1 - 毎日
- 7 - 毎週
- 30 – 毎月
- N – これは任意の数値です。 N は日数を示します
注:毎月実行する必要があるジョブには「@monthly」を使用することもできます。
フィールド 2 は遅延です: これは遅延を分単位で示します。つまり、マシンの起動後、anacron がジョブを実行する前に X 分待機する必要があります。
フィールド 3 はジョブ識別子です: ジョブのタイムスタンプ ファイルの名前です。ジョブごとに一意である必要があります。これは、/var/spool/anacron ディレクトリの下のファイルとして利用できます。このファイルには、このジョブが最後に実行された時刻を示す 1 行が含まれます。
# ls -1 /var/spool/anacron/ test.daily cron.daily cron.monthly cron.weekly # cat /var/spool/anacron/test.daily 20110507
フィールド 4 はコマンドです: 実行する必要があるコマンドまたはシェル スクリプト。
シェル スクリプトと同様に、anacrontab ファイル内のコメントは #
で始まります注: /etc/crontab ファイル形式については、Linux Crontab:15 の素晴らしい Cron ジョブの例の記事を参照してください。
アナクロンの例
次の例では、/home/sathiya/backup.sh スクリプトを 7 日に 1 回実行します。
backup.sh ジョブが実行されるはずの日に、何らかの理由でシステムがダウンした場合、anacron はシステムが復旧してから 15 分後に backup.sh スクリプトを実行します (さらに 7 日間待つ必要はありません)。
# cat /etc/anacrontab 7 15 test.daily /bin/sh /home/sathiya/backup.sh
START_HOURS_RANGE と RANDOM_DELAY
上記の例は、backup.sh スクリプトを 15 分の遅延で毎日実行する必要があることを示しています。つまり、ラップトップが起動されたとき、15 分後にのみ実行されました。
ラップトップまたはデスクトップがシャットダウンされていない場合はどうなりますか?ジョブはいつ実行されますか?これは、/etc/anacrontab ファイルの START_HOURS_RANGE 環境変数によって指定されます。
デフォルトでは、これはファイル内で 3 ~ 22 に設定されています。これは、午前 3 時から午後 10 時までの時間範囲を示します。
# grep START /etc/anacrontab START_HOURS_RANGE=3-22
/etc/anacrontab ファイルの 2 番目のフィールドで指定されたユーザー定義の遅延に加えて、anacron は x 分をランダムに追加します。 x は、/etc/anacrontab ファイルの RANDOM_DELAY 変数によって定義されます。
デフォルトでは、これはファイルで 45 に設定されています。これは、anacron が x 分 (0 ~ 45 からランダムに選択) を追加し、これをユーザー定義の遅延に追加することを意味します。
# grep RANDOM /etc/anacrontab RANDOM_DELAY=45
クロン対アナクロン
Cron と anacron には、独自の長所と短所があります。要件に応じて、いずれかを使用してください。
Cron | アナクロン |
---|---|
最小粒度は分単位です (つまり、ジョブを毎分実行するようにスケジュールできます) | 最小粒度は日単位のみ |
Cron ジョブは通常のユーザーがスケジュールできます (スーパー ユーザーによって制限されていない場合) | Anacron はスーパー ユーザーのみが使用できます (ただし、通常のユーザーが使用できるようにするための回避策があります) |
Cron は、システムが 24 時間 365 日稼働していることを想定しています。ジョブがスケジュールされていて、その間にシステムがダウンしている場合、ジョブは実行されません。 | Anacron は、システムが 24 時間年中無休で稼働しているとは想定していません。ジョブがスケジュールされていて、その間にシステムがダウンしていた場合、システムが復旧したときにジョブを開始します。 |
サーバーに最適 | デスクトップおよびラップトップに最適 |
ジョブを特定の時間と分に実行する必要がある場合は cron を使用 | 時間と分に関係なくジョブを実行する必要がある場合は、anacron を使用してください |