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


85

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

cronが何かを実行するようにスケジュールされている間にコンピューターがシャットダウンしたり、電源が切れたりするとどうなりますか?

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


3
私はウェブでanacronチュートリアルを探しましたが、良いものを見つけることができませんでした。manページを調べることもあまり役に立ちませんでした。既存のcrontabを変更して、anacronに変更するにはどうすればよいですか?それとも、この内の任意のチュートリアルでは、非常に参考になります
seg.server.fault

1
回答を編集して、いくつかの例を含めました。それがお役に立てば幸いです!
ジェフ09

回答:


70

コンピューターがシャットダウンされると(または、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}ディレクトリのいずれかにスクリプトのコピーまたはシンボリックリンクを配置します。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日まで実行されませんでした。

コンピュータがオフのときに4日目にジョブを実行し、3日目に実行を「ミス」するには、/ etc / anacrontabでこれを使用します(/ etc / crontabから行を削除することを忘れないでください)。

# period delay job-identifier command
3 5 maint-job /usr/local/sbin/maint.sh

上記の「5」の「遅延」は、anacronがこのジョブを実行する前に5分間待機することを意味します。アイデアは、ブート時にアナクロンがすぐに起動しないようにすることです。


5
デフォルトでは、Ubuntuはanacronを使用します。
3dinfluence 09

1
おかげで、3dincluence-デフォルトのubuntu setipでどのcrontabがanacronによって処理されるかを示すように調整された回答。
ジェフ09

2
独自のcrontabエントリではなく/etc/cron.*/にスクリプトを配置する場合は、「。」を付けないでください。スクリプトのファイル名。debianとubuntuはrun-partsを使用してこのようなスクリプトを実行します。デフォルトでは、run-partsは。ファイル名に-これは、アップグレードから名前が変更されたスクリプトの.dpkg-oldおよび.dpkg-distバージョンを実行しないようにするためです。そのため、スクリプトまたはシンボリックリンクを「maint.sh」ではなく「maint」と呼びます。
cas

OpenSUSEは、11.2以降(デフォルトではTumbleweed / Leap 42.2以降)からデフォルトでcronieを使用します。を使用anacronするには、cronie-anacronパッケージをインストールします。
palswim

13

これは、使用するcronスケジューラに依存します。基本的なバニラcronデーモンは、システムのダウンタイムが原因で逃したタスクを実行しません。ただし、この状況向けに特別に設計された他のcronスケジューラがあります。最も一般的な2つの例は、anacronfcronです。


5

コンピューターの電源が切れている間にスケジュールされたタスクは、コンピューターの電源を入れ直すと実行されません


2

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

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


2

実行しているcronデーモンに本当に依存しています。Vixie-cronは、欠落したcronジョブをスキップします。fcronは、逃したcronをできるだけ早く実行します。IIRCはvixie-cronにも基づいているため、探しているのであれば、fcronをチェックしてください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.