74

プロセスが端末から切り離されるため、プロセスをデーモン化する利点があります。しかし、同じことは cron ジョブでも実現できます。[そうでない場合は親切に修正してください]

cronjob またはデーモン プロセスを使用するシナリオを区別できる最適な要件は何ですか?

4

4 に答える 4

62

一般に、タスクを 1 時間に数回 (おそらく 10 分未満) 実行する必要がある場合は、おそらくデーモンを実行する必要があります。

常に実行されているデーモンには、次の利点があります。

  • 1 分間に 1 回を超える頻度で実行できます
  • 以前の実行からの状態をより簡単に記憶できるため、(状態を記憶する必要がある場合) プログラミングが簡単になり、場合によっては効率が向上します。
  • 多くのホストを持つインフラストラクチャでは、「群れの群れ」効果は発生しません
  • 複数の呼び出しをより簡単に回避できます (おそらく?)

しかし

  • 終了した場合 (たとえば、エラーに続いて)、その機能を実装しない限り、自動的に再起動されません。
  • 何も役に立たないときでもメモリを使用します
  • メモリ リークは、より大きな問題です。

一般に、堅牢性は「cron」に有利であり、パフォーマンスはデーモンに有利です。しかし、多くの重複 (どちらでも問題ありません) と反例があります。それはあなたの正確なシナリオに依存します。

于 2012-10-19T21:13:36.113 に答える
13

cronjob とデーモンの違いは、実行時間枠です。

cronjobは、時々実行されるプロセスですcronjob の例としては、一時フォルダーの内容を時々削除するスクリプトや、毎日午前 9 時に多数のデバイスにプッシュ通知を送信するプログラムなどがあります。

一方、デーモンはユーザーから切り離されて実行されるプロセスですが、終了しても再起動されません。

于 2012-10-19T13:40:50.317 に答える
11

他のユーザーが永続的に利用できるサービスが必要な場合は、デーモンを実行する必要があります。これは、かなり複雑なプログラミング タスクです。デーモンは、永続的に世界と通信できる必要があり (たとえば、ソケットまたは TCP ポートでリッスンすることによって)、各ジョブをリークやリークなしできれいに処理するように記述する必要があるためです。リソースを長時間ロックすることさえあります。

対照的に、特定のジョブの説明が事前に十分に決定でき、それ以上の情報がなくても自動的に動作し、自己完結型である場合は、タスクを定期的に実行する cron ジョブを用意するだけで十分です。 . これは、限られた時間だけ実行して終了するプログラムが必要なだけなので、設計がはるかに簡単です。

一言で言えば、デーモンは永遠に実行される単一のプロセスです。cron ジョブは、短期間の新しいプロセスを定期的に開始するメカニズムです。

于 2012-10-19T14:47:17.940 に答える
1

デーモンは、状態をキャッシュしたり、ディスクへの書き込みを延期したり、クライアントとの長時間のセッションに参加したりすることで、その寿命を利用できます。

また、時間の経過とともにメモリ リークが蓄積して問題を引き起こす可能性があるため、デーモンにはメモリ リークがあってはなりません。

于 2012-10-19T13:45:32.593 に答える