※有料会員になるとこの動画をご利用いただけます
詳しい説明を読む
#12:anacron
このチャプターでは、anacronについて学習します。
- システムが停止しているときに実行されるはずだった cron ジョブを実行できる
 - ただ、本来スケジューリングされていた時刻に実行できるわけではなく、システムが再起動したときに実行できる
 
- anacron は、anacron デーモンが定期的に 
/etc/anacrontabを確認して、cron ジョブを適宜実行している /etc/anacrontabにあるそれぞれのタスクには、そのタスクを最後に実行した時刻が保存されているファイルがあり、anacron デーモンは、そのファイルを確認することで、実行の必要性を判断している
- ファイル: 
/var/spool/anacron/タスク名 タスク名は、/etc/anacrontabで指定する
- ファイル: 
 
- 書式: <間隔(日)> <遅延時間(分)> <タスク名> <実行する処理>
- 間隔(日): タスクを実行する間隔、最後にタスクを実行した時刻から、ここで指定する間隔だけ経過していた場合に、タスクを実行する
- 指定する値として、
@daily(= 1),@weekly(= 7),@monthly(= ひと月) も利用できる 
 - 指定する値として、
 - 遅延時間(分): タスクの実行を遅らせる時間、システムの負荷を分散させることができる
 - タスクの名前: それぞれのタスクを管理する際に用いる名前(先述の 
/var/spool/anacron/タスク名のタスク名にも使われる) - 実行する処理: 実行したいコマンド
 
 - 間隔(日): タスクを実行する間隔、最後にタスクを実行した時刻から、ここで指定する間隔だけ経過していた場合に、タスクを実行する
 
- crontab と anacrontab は、それぞれ別の系統で管理されています
 
- そのため、crontab と anacrontab の双方に同じタスクを設定すると、タスクを重複実行してしまうことがあります
- 例: タスクA(= 1 日に 1 回実行したいタスクで、システムが停止していた場合は、システム再起動時に実行したい)
- この場合、crontab と anacrontab の双方に、タスクA を設定すると 1 日に 2 回タスク A を実行してしまうことがあります
 - crontab:
- 前提: タスクA の実行時刻にシステムが起動状態
 - このとき、タスクA は実行される
 
 - anacrontab:
- 前提: タスクA を最後に実行した時刻から 1 日経過した
 - このとき、タスクA は実行される
 
 
 
 - 例: タスクA(= 1 日に 1 回実行したいタスクで、システムが停止していた場合は、システム再起動時に実行したい)
 - このようなことが起こりうることから、crontab の 
/etc/cron.dailyや、/etc/cron.weekly,/etc/cron.monthlyのタスクの設定は、anacron がインストールされているときに、anacron を優先する設定になっています
/etc/cron.daily:25 6 * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )/etc/cron.weekly:47 6 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )/etc/cron.monthly:52 6 1 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )test -x /usr/sbin/anacron || X: /usr/sbin/anacron を実行できたら実行する、実行できなかったら X を実行する
 - anacrontab には、
/etc/cron.dailyや、/etc/cron.weekly,/etc/cron.monthlyを適宜実行するように設定されています
/etc/cron.daily:1 5 cron.daily run-parts --report /etc/cron.daily/etc/cron.weekly:7 10 cron.weekly run-parts --report /etc/cron.weekly/etc/cron.monthly:@monthly 15 cron.monthly run-parts --report /etc/cron.monthly
 - タスクA の例のように、「システム停止にも対応したい」理由で、crontab と anacrontab の双方にタスクを設定すると、想定外にタスクが実行されることがあるので、気をつけてください
 
anacrontab - Linux マニュアル
https://man7.org/linux/man-pages/man5/anacrontab.5.html