web-dev-qa-db-ja.com

cronとanacronの関係について混乱している

Cronとanacronがどのように連携するかについての一般的な説明をするために、私は無駄にグーグルをしてきました。この時点では、manページは私にはちょっと深すぎます。

私はcrontabにタスクを追加するので混乱しますが、それは動作しますが、crontabからタスクを削除しても、anacronの下で実行されます。 /etc/cron.dailyにタスクが表示されていますが、どのようにしてそこに到達したのかわかりません。 cronは私のシステムで常に実行されていますが、anacronではありません。実際、anacronはcronによって開始されています。

基本的に、タスクを追加および削除する方法に関するユーザーレベルのイントロが必要です。これは、crontabを明確に編集するように指示する簡単にグーグルが可能な答えが完全ではないためです。チュートリアルへのリンクは問題ありません。

12
Organic Marble

cronanacronはどちらも、ユーザーが定義した特定の時点まで繰り返しタスクの実行をスケジュールできるデーモンです。

cronanacronの主な違いは、前者はシステムが継続的に実行されていると想定していることです。システムの電源が切れており、この間にジョブがスケジュールされている場合、ジョブは実行されません。

一方、anacronは「時代遅れ」であり、24時間365日稼働していないシステム向けに設計されています。 anacronが機能するためには、タイムスタンプ付きファイルを使用して、コマンドが最後に実行された時刻を見つけます。また、cronと同様に、ファイル/etc/anacrontabも維持します。さらに、cron.dailyは毎日anacronを実行します。したがって、anacronは1日に1回しかジョブを実行できませんが、cronは1分ごとに実行できます。

man anacrontabから:

実行されると、Anacronは設定ファイル(通常は/ etc/anacrontab(anacrontab(5)を参照))からジョブのリストを読み取ります。このファイルには、Anacronが制御するジョブのリストが含まれています。各ジョブエントリは、日単位の期間、分単位の遅延、一意のジョブ識別子、およびシェルコマンドを指定します。

Anacronは、各ジョブについて、このジョブが過去n日間に実行されたかどうかを確認します。nはそのジョブに指定された期間です。そうでない場合、Anacronは、遅延パラメーターとして指定された分数だけ待機した後、ジョブのシェルコマンドを実行します。

コマンドが終了すると、Anacronはそのジョブの特別なタイムスタンプファイルに日付を記録するため、いつ再実行するかを知ることができます。時間の計算には日付のみが使用されます。時間は使用されません。

つまり、タスクを毎日実行するようにスケジュールし、その間にコンピューターの電源を切った場合、anacronを実行すると、タスクが24時間以上前に最後に実行されたことがわかり、タスクを正しく実行できます。

たとえば、/etc/anacrontabで次を指定した場合:

7       15      test.daily      /bin/sh /home/username/script.sh

script.shジョブが実行されることになっている日に、システムが実行されていない場合、anacronはシステムが復旧してから15分後にscript.shを実行します。

参照が少ない:

14
Ron