Crontabを使用していくつかのタスクをスケジュールします。
Cronが何かを実行するようにスケジュールされていたときに、コンピューターがシャットダウンまたはオフにされた場合はどうなりますか?
コンピューターの電源をオンにした後、欠落したcronジョブはそれぞれ実行されますか、それともその日の欠落ジョブは無視されますか?逃したジョブが再開しない場合、コンピューターの電源を入れた後で、逃したタスクを実行するようにcronを構成する方法はありますか?
コンピューターがシャットダウンされている場合(または、cronデーモンが実行されていない場合)、cronジョブは開始されません。
コンピュータがシャットダウンされているときに、事後に実行したいジョブがある場合は、anacronを使用します。デフォルトでインストールされます。詳細については、「man anacron」、「man anacrontab」、または/ etc/anacrontabファイルを参照してください。
Ubuntuは次のcrontabエントリにデフォルトでanacronを使用します。
/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly
残りのcrontabはメインのcronデーモンで処理されるようにしておきます。具体的には次のとおりです。
/etc/crontab
/etc/cron.d
/var/spool/cron
ノート
Anacron自体はデーモンとして実行されませんが、システム起動スクリプトとcron自体に依存して実行されます。
私が見ているUbuntu 8.04ボックスでは、/ etc/init.d/anacronが起動時に実行され、毎朝07:30にcronによって再び実行されます。
/usr/share/doc/anacron/README.gzのREADMEには、マンページに含まれているよりも少し多くの情報があります。
例
単純な「毎日」、「毎週」、「毎月」のジョブの場合、上記の/etc/cron.{daily|weekly|monthly}ディレクトリの1つにスクリプトのコピーまたはシンボリックリンクを配置します。 Anacronは、それを毎日/毎週/毎月実行します。コンピューターがオフの場合、「毎週」のスクリプトは通常実行されますが、次回コンピューターがオンになったときに実行されます。
別の例として、次のスクリプトがあるとします:/usr/local/sbin/maint.sh
3日ごとに実行したい場合、/ etc/crontabの標準エントリは次のようになります。
# m h dom mon dow user command
0 0 */3 * * root /usr/local/sbin/maint.sh
コンピュータがその月の3日の00:00にオンになっていない場合、ジョブは6日まで実行されません。
コンピューターの電源がオフで、3日に実行が「失敗」したときに、代わりに4日にジョブを実行するには、/ etc/anacrontabでこれを使用します(/ etc/crontabから行を削除することを忘れないでください)。
# period delay job-identifier command
3 5 maint-job /usr/local/sbin/maint.sh
上記の「5」の「遅延」は、anacronがこのジョブを実行する前に5分間待機することを意味します。アイデアは、anacronが起動時にすぐに起動しないようにすることです。
コンピューターの電源がオフのときにスケジュールされたタスクは、コンピューターの電源が再びオンになったときに実行されません
Cronジョブの実行中にシャットダウンすると、システムがシャットダウンし、cronジョブが停止します(または実行されません)。
チェックインできる1つの代替手段は、anacronです。
実際に実行しているcronデーモンに依存します。 Vixie-cronは見逃されたcronjobsをスキップします。 fcron 逃したcronをできるだけ早く実行します。 IIRCはvixie-cronにも基づいているので、それがあなたが探しているものである場合は、fcronをチェックすることをお勧めします。