web-dev-qa-db-ja.com

cron vs systemdタイマー

最近、cronの代替手段、つまりsystemdタイマーが存在することが指摘されました。

ただし、systemdまたはsystemdタイマーについては何も知りません。私はcronのみを使用しました。

少し Arch Wikiでの議論 があります。ただし、長所と短所に焦点を当てて、cronとsystemdタイマーの詳細な比較を探しています。私はDebianを使用していますが、これらの2つの代替が利用可能なすべてのシステムの一般的な比較をお願いします。このセットにはLinuxディストリビューションのみが含まれる場合があります。

これが私が知っていることです。

クロンは非常に古く、1970年代後半にさかのぼります。 cronの最初の作者は、Unixの作成者であるケントンプソンです。最近のLinuxディストリビューションのcronが直接の子孫であるVixie cronは、1987年のものです。

Systemdはかなり新しいものであり、議論の余地があります。ウィキペディアによれば、最初のリリースは2010年3月30日でした。

したがって、systemdタイマーに対するcronの利点の現在のリストは次のとおりです。

  1. Cronは、インストール可能なサポートされているソフトウェアであるという意味で、あらゆるUnixライクなシステムに存在することが保証されています。それは変わりません。対照的に、systemdは将来Linuxディストリビューションに残る場合もあれば、そうでない場合もあります。これは主にinitシステムであり、別のinitシステムで置き換えることができます。

  2. Cronの使い方は簡単です。 systemdタイマーよりも明らかにシンプルです。

Cronに対するsystemdタイマーの利点の対応するリストは次のとおりです。

  1. Systemdタイマーはより柔軟で機能的かもしれません。しかし、その例を教えてください。

要約すると、ここに回答で見ると良いことがいくつかあります:

  1. Cronタイマーとsystemdタイマーの詳細な比較(それぞれの長所と短所を含む)。
  2. 他の人ができないことができることの例。
  3. Cronスクリプトとsystemdタイマースクリプトの少なくとも1つの比較。
89
Faheem Mitha

これら2つについていくつかのポイントを示します

  1. cronジョブが実際に何を実行しているかを確認するのはややこしいかもしれませんが、すべてのsystemdタイマーイベントは、他のsystemdユニットと同様に、システムジャーナルに慎重に記録されます。

  2. systemdタイマーは、リソース管理のためのすべての機能を備えたsystemdサービスであり、IO CPUスケジューリング、...
    リストがあります:

    • システムコールフィルター
    • ユーザー/グループID
    • メンバーシップ管理
    • いい値
    • OOMスコア
    • IOスケジューリングクラスと優先度
    • CPUスケジューリングポリシーCPU
    • アフィニティumask
    • タイマースラック
    • 安全なビット
    • ネットワークアクセスおよび...
  3. 他のsystemdサービスと同様に依存関係オプションを使用すると、アクティベーション時間に依存関係が存在する可能性があります。

  4. ユニットはさまざまな方法でアクティブ化でき、それらの組み合わせも構成できます。サービスは、ユーザー、ブート、ハードウェアの状態の変化などのさまざまなイベントによって開始またはトリガーできます。たとえば、いくつかのハードウェアが接続されてから5分後に、...

  5. systemdタイマーを使用して、ニーズに基づいてさまざまなカスタマイズを行うために、いくつかのファイルと単純なタグをはるかに簡単に構成できます。

  6. 次のものを使用して、全体を簡単に有効/無効にします。

    systemctl enable/disable 
    

    そして、ジョブのすべての子供を殺します:

    systemctl start/stop
    
  7. systemdタイマーは、カレンダーと単調な時間でスケジュールできます。これは、異なるタイムゾーンの場合に非常に役立ちます。

  8. systemdタイムイベント(カレンダー)はcronよりも正確です(1秒の精度のようです)。

  9. systemdタイムイベントは、繰り返し発生するイベントや、一度発生する必要があるイベントでさえ、より意味があります。以下に document の例を示します。

    Sat,Thu,Mon-Wed,Sat-Sun → Mon-Thu,Sat,Sun *-*-*00:00:00
      Mon,Sun 12-*-* 2,1:23 → Mon,Sun 2012-*-* 01,02:23:00
                    Wed *-1 → Wed *-*-01 00:00:00
            Wed-Wed,Wed *-1 → Wed *-*-01 00:00:00
                 Wed, 17:48 → Wed *-*-* 17:48:00 
    
  10. CPU使用率の観点から、systemdタイマーは経過時間でCPUをウェイクアップしますが、cronはより頻繁にそれを行います。

  11. タイマーイベントは、実行の終了時間に基づいてスケジュールでき、実行と実行の間に遅延を設定できます。

  12. 他のプログラムとの通信も注目に値します。他のプログラムがタイマーとそのタスクの状態を知る必要がある場合もあります。

47
F.sb

馬の口から直接、いわば: https://wiki.archlinux.org/index.php/Systemd/Timers#As_a_cron_replacement

上記のページからの抜粋:

メリット

タイマーを使用する主な利点は、独自のsystemdサービスを持つ各ジョブから得られます。これらの利点のいくつかは次のとおりです。

  • タイマーとは関係なく、ジョブを簡単に開始できます。これにより、デバッグが簡単になります。
  • 各ジョブは、特定の環境で実行するように構成できます(systemd.exec(5)を参照)。
  • ジョブはcgroupにアタッチできます。
  • 他のsystemdユニットに依存するようにジョブを設定できます。
  • ジョブはsystemdジャーナルに記録され、簡単にデバッグできます。

警告

Cronで簡単にできることの中には、タイマーユニットだけでは難しいものもあります。

  • 複雑さ:systemdで時間指定ジョブをセットアップするには、2つのファイルを作成し、いくつかのsystemctlコマンドを実行します。これを、crontabに1行追加するのと比較してください。
  • メール:ジョブの失敗時にメールを送信するためのcronのMAILTOに相当する組み込みのものはありません。 OnFailure =を使用して同等のものを設定する例については、次のセクションを参照してください。
17
shdwlynx