web-dev-qa-db-ja.com

crontabを使用したジョブスケジューリング、その間にコンピュータがシャットダウンするとどうなりますか?

Crontabを使用していくつかのタスクをスケジュールします。

Cronが何かを実行するようにスケジュールされていたときに、コンピューターがシャットダウンまたはオフにされた場合はどうなりますか?

コンピューターの電源をオンにした後、欠落したcronジョブはそれぞれ実行されますか、それともその日の欠落ジョブは無視されますか?逃したジョブが再開しない場合、コンピューターの電源を入れた後で、逃したタスクを実行するようにcronを構成する方法はありますか?

92

コンピューターがシャットダウンされている場合(または、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が起動時にすぐに起動しないようにすることです。

76
jeff

これは、使用するcronスケジューラーによって異なります。基本的なVanilla cronデーモンは、システムのダウンタイムが原因で失われたタスクを実行しません。ただし、この状況に合わせて特別に設計された他のcronスケジューラがあり、これが自動的に行われます。最も一般的な2つの例は anacronfcron です。

17
Tyler McHenry

コンピューターの電源がオフのときにスケジュールされたタスクは、コンピューターの電源が再びオンになったときに実行されません

6
Alan H

Cronジョブの実行中にシャットダウンすると、システムがシャットダウンし、cronジョブが停止します(または実行されません)。

チェックインできる1つの代替手段は、anacronです。

3
KPWINC

実際に実行しているcronデーモンに依存します。 Vixie-cronは見逃されたcronjobsをスキップします。 fcron 逃したcronをできるだけ早く実行します。 IIRCはvixie-cronにも基づいているので、それがあなたが探しているものである場合は、fcronをチェックすることをお勧めします。

3
gregf