anacronは、毎日、毎週、毎月実行するタスクをどのように決定しますか?

anacronは、毎日、毎週、毎月実行するタスクをどのように決定しますか?

anacronは、毎日、毎週、毎月実行するタスクをどのように決定しますか?

  1. anacronは以前のジョブのどの時間を使用してジョブを再実行するかを決定します(以前のジョブの開始時刻または完了時刻)。 anacronは終了時間だけを使用し、cronは開始時間だけを見るのが正しいですか?
  2. 毎日は24時間を意味しますか、それとも毎日のジョブを実行できる別のカレンダー日を意味しますか?

    週間は正確に7日を意味しますか、それとも週間ジョブを実行する別の週ですか?

    毎月は正確に30日を意味しますか、それとも月ごとのタスクを実行する月が別の月ですか?

    タイムスタンプファイルは1日まで正確なので、1日の質問に対する回答は24時間以外の別の「カレンダー」日付のようです。

    $ sudo cat /var/spool/anacron/cron.daily 
    20181101
    $ sudo cat /var/spool/anacron/cron.weekly 
    20181028
    $ sudo cat /var/spool/anacron/cron.monthly 
    20181011
    

いくつかの例。毎日の作業が今日午前4時に実行され始め、アナクロンが明日の朝午前6時に一度だけ実行されるとしましょう。

  • 今日の午前11時にジョブの実行が完了すると、anacronはジョブの実行を決定するために開始時刻または終了時刻のどちらを使用しますか?

  • 今日の午前5時にジョブの実行が完了したら、anacronはその時点でジョブを実行することにしましたか?

  • 明日午前3時にジョブの実行が終わったら、anacronはその時点でジョブを実行することにしましたか?

ありがとうございます。

答え1

anacronは、定義された期間内にジョブが実行されない場合にジョブを実行します。したがって、7日ごとに実行されるように定義されたジョブは、過去7日間に実行されなかった場合に実行されます。 anacronは単にカレンダーの日付を見て計算されます。最後の実行のタイムスタンプをロードし、現在の「日数」を計算してから、2つを減算します。

  1. anacronはジョブが実行された後にタイムスタンプを更新するため、そのジョブが再実行されてはならない期間の始めに完了日を使用します。 cronは現在の日付と時刻を指定された開始指定子とのみ比較するため、はい、開始時間のみを考慮します。

  2. 毎日は、ジョブが最後に実行された時間が昨日または前でなければならないことを意味します。毎週は、ジョブが7日以上前に最後に実行される必要があることを意味します。毎月少しずつ違います。これは、ジョブが最後に実行された時間でなければならないことを意味します。N数日前またはその前にどこでNは前月の日数で、経過した日数が今月の日数とまったく同じ場合は無視されます。

    あなたの例は次のとおりです。

    • 今日の午前11時または午前5時に完了した毎日のジョブは、明日再実行されます。
    • 明日午前3時に完了した毎日のジョブは、再び再実行されます。

関連情報