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


19

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

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

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

回答:


19

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

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

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

から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ジョブが実行される予定の日にシステムが実行されていない場合は、システムが復旧してから15分後にanacron実行script.shされます。

いくつかのリファレンス:


ありがたいことに、Digital Oceanチュートリアルは特に優れています。どうやって見逃したかわからないので、リンクに感謝します。
オーガニックマーブル

ありがとう。「cron.dailyはanacronを毎時間実行します」ということで、代わりに「cron.dailyが毎日anacronを実行します」と言いますか?
ティム

これをありがとう。- anacronすべてのVPSが常時オンシステムであるため、すべてのVPSから削除しました。(そもそもどうやってそこにたどり着いたのかわからない。聞いたこともない。)私のcrontabエントリー(毎日、毎週、...)はすべて、予想された時間に実行されるようになった。
アダムビーン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.