web-dev-qa-db-ja.com

cronは内部的にどのようにジョブをスケジュールしますか?

「モダン」cronデーモン内部ジョブをスケジュールするにはどうすればよいですか?一部のcrondsは、atを介して実行をスケジュールすることがよくありました。したがって、crontabが書き出された後、crondを実行します。

  1. 将来のすべてのイベントと間隔のスリープのためにcrontabを解析しますか?
  2. 集約されたcrontabデータベースを毎分ポーリングして、現在の時刻がスケジュールパターンと一致しているかどうかを確認しますか?
  3. その他?

おかげで、

47
Jé Queue

いくつかのコオロギはこの質問で聞いた。いくつかの離散イベントシミュレーションペーパーとWikipediaを含むGood 'ol RTFC:

http://en.wikipedia.org/wiki/Cron#Multi-user_capability

このcronで使用されるアルゴリズムは次のとおりです。

  1. 起動時に、すべてのアカウント所有者のホームディレクトリで.crontabという名前のファイルを探します。
  2. 見つかった各crontabファイルについて、各コマンドが実行される将来の次回の時間を決定します。
  3. それらのコマンドを、対応する時刻と「5つのフィールド」の時刻指定子とともにFranta-Malyイベントリストに配置します。
  4. メインループに入る:
    1. キューの先頭にあるタスクエントリを調べて、実行される将来の期間を計算します。
    2. その期間寝ます。
    3. 起動し、正しい時刻を確認した後、タスクを作成したユーザーの特権で(バックグラウンドで)キューの先頭で実行します。
    4. このコマンドを実行する次回の時間を決定し、その時点でイベントリストに戻します。
53
Jé Queue