Cron vs Systemdタイマー


83

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

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

Arch Wikiには少し議論があります。しかし、私はcron賛否両論に焦点を合わせて、systemdタイマーとの間の詳細な比較を探しています。私はDebianを使用していますが、これら2つの選択肢が利用可能なすべてのシステムの一般的な比較をお願いします。このセットには、Linuxディストリビューションのみが含まれる場合があります。

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

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

Systemdはもっと新しく、やや物議をかもします。ウィキペディアによると、最初のリリースは2010年3月30日でした。

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

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

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

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

  1. Systemdタイマーは、より柔軟で機能が豊富です。しかし、その例が欲しいです。

したがって、要約すると、回答で見た方が良いものがいくつかあります:

  1. cronタイマーとsystemdタイマーの詳細な比較(それぞれの使用の長所と短所を含む)。
  2. 一方ができることともう一方ができないことの例。
  3. cronスクリプトとsystemdタイマースクリプトの少なくとも1つの並列比較。

4
「Cronは、あらゆるUnixライクシステムに存在することが保証されています。それは変わりません。」–私はこれを強く議論します。歴史的に、cronは多くの場合Unixインストールの基本セットアップに含まれてきましたが、今日のほとんどのシステムでは、cronは単に任意のオプションソフトウェアパッケージです。実際、cronよりも望ましい一般的なcronの代替品(anacron、fcron、jobberなど)がいくつかあります。cronの機能は、systemdやinitのようにシステムの動作に不可欠ではないため、現在および将来の移植性が心配な場合は、むしろそれに賭けたくありません。
グイド

6
これは、回答に必要なもののかなりのリストです。ツールを自分で学習し、それらの答えを自分で定式化できるかどうかを確認し、理解できない具体的なことがある場合は、ここで質問してください。
ラースク

5
あんまり。私はこのトピックについて言いたいことをすべて言いました。systemdに関係するものについての広範な議論に参加することは意味がありません-systemdがもたらすマイナーなメリットは、Linuxエコシステムの企業独占に値すると考える人もいます。他の人はしません。
cas

7
「クロンは非常に古く、1970年代後半に遡ります。」事実上正しいが、システム上のパッケージが適切で安定した方法で維持されている限り、完全に無関係です。太陽も非常に古いですが、それが私たちがそれをより輝かしくて新しいものと交換することを意味しないことを願っています。
オテウス

5
@Otheusあなたはその部分を間違っていると思う-何かが長い間存在していると言うことはin辱ではない。少なくとも多くのUnix関係者に。家は数百年前のものだと言うようなものです。それは確かに、いくつかの問題が発生することを意味します。老朽化を言っているわけではありません。これは、40年にわたって有用であることが証明されたシンプルなツールです。
-derobert

回答:


43

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

  1. cronジョブが実際に行うことを確認するのは面倒ですが、すべてのsystemdタイマーイベントは、物事をはるかに容易にするイベントに基づいて、他のsystemdユニットと同様にsystemdジャーナルに慎重に記録されます。

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

    • システムコールフィルター
    • ユーザー/グループ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のタイムイベントは、繰り返し発生するイベントや1回発生するイベントにとっても意味がありますドキュメントの例を次に示し ます

    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. 他のプログラムとの通信も注目に値する場合があります。他のプログラムがタイマーとタスクの状態を知る必要がある場合があります。


2
それは良い努力です、ありがとう。ただし、例を含めて、cronとのより直接的な比較が役立ちます。また、記述した内容の一部は完全には明確ではありません。たとえば、「CPU使用率の観点から、systemdタイマーは経過時間でCPUを起動しますが、cronはより頻繁に起動します」。
ファヒムミタ

こんにちは、@ F.sb!あなたの答えは、異なるタイムゾーンを使用してジョブをスケジュールできることを暗示しているようです。これは正しいです?どうしますか?cronの標準的な実装よりも大きな利点がありますが、man systemd.time矛盾するように思われる点を除き、情報が見つかりませんでした。UTC以外の非ローカルタイムゾーンはサポートされていません。
タッドリスピー

依存関係は便利です。たとえば、ホストバックアップがsystemdタイマーとして実行される場合、依存関係を使用して、バックアップの直前にデータベースのエクスポートが完了するようにすることができます。
vk5tu

6
前もってもっと正直になってください。まず、これらの2つの点についていくつか説明することから始めて、次に、希望する選択肢の利点を列挙します。あなたが好みを持っていることは悪くありませんが、それからあなたはそのように前もって述べるべきです。それに加えて、すべてが1つのシステムに有利であり、システムの長所を見ないという事実から、この答えはゆがんでいるように感じます。
ジャスパー

2
@ジャスパー愛する私は私のニーズに基づいて両方を使用しますが、あなたのニーズに基づいてどちらかを選択することは常にあなたの選択です、私はちょうどドキュメントとマニュアルに基づいたいくつかの事実に言及しました。
F.sb

16

馬の口から、いわば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 =を使用して同等の設定を行う例については、次のセクションを参照してください。

6
エラー...特にライセンスに互換性がないため、ほぼ完全にコピー&ペーストされる回答についてどう思うかわかりません。ただし、少なくとも「次のセクションを参照」ビットを修正する必要があります。その間違いにより、コピーして貼り付けたものを読んでいないかのように感じられます。
デロバート

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.