最近、誰かが私にcronの代替、つまりシステムタイマーがあると指摘しました。
しかし、私はsystemdまたはsystemdタイマーについて何も知りません。私はcronだけを使用しました。
少しArch Wikiでの議論。しかし、私はcron
長所と短所に焦点を当て、systemdタイマーとの詳細な比較を探しています。私はDebianを使用していますが、両方の選択肢を使用できるすべてのシステムを全体的に比較したいと思いました。このセットにはLinuxディストリビューションのみを含めることができます。
これが私が知っていることです。
クローンは1970年代後半にさかのぼり、非常に古くなりました。 cronの原作者はUnixの創始者であるKen Thompsonです。最新のLinuxディストリビューションのcronは、1987年にさかのぼるVixie cronの直系の子孫です。
Systemdは、より新しく、やや議論の余地があります。 Wikipediaによると、最初の出版日は2010年3月30日でした。
したがって、システムタイマーと比較してcronの現在の利点のリストは次のとおりです。
Cronは、インストール可能でサポートされているソフトウェアの点で、すべてのUnixシリーズシステムに存在することが保証されています。これは変わりません。対照的に、systemdは将来のLinuxディストリビューションに残っている可能性があります。これは基本的に初期化システムであり、他の初期化システムに置き換えることができます。
クローンは使いやすいです。システムタイマーよりも確かに簡単です。
cronと比較してsystemdタイマーの利点のリストは次のとおりです。
- システムタイマーはより柔軟で強力です。しかし、いくつかの例を見たいと思います。
したがって、要約すると、答えで次のいくつかを見るのが良いでしょう。
- cronタイマーとsystemdタイマーの詳細比較(各使用の長所と短所を含む)
- ある人はできますが、他の人はできないことの例です。
- 少なくとも、cronスクリプトとシステムタイマースクリプトを並べて比較します。
答え1
これら2つのいくつかの重要なポイントは次のとおりです。:
クローン操作が正確に何をしているかを確認するのはかなり混乱しますが、すべてのsystemdタイマーイベントは他のイベントベースのsystemdユニットと同様にsystemdログに注意深く記録されるため、作業が簡単になります。
systemdタイマーは、リソース管理、IO CPUスケジューリングなどのすべての機能を備えたsystemdサービスです。
リストは次のとおりです。- システムコールフィルタ
- ユーザー/グループID
- 会員管理
- お金の価値
- OOMスコア
- IOスケジューリングカテゴリと優先順位
- CPUスケジューリング戦略CPU
- アフィニティマスク
- タイマーカジュアルパンツ
- 安全なビット
- ネットワークアクセスと...
- システムコールフィルタ
他のシステムサービスと同様に、依存関係オプションを使用してアクティベーション時間を信頼できます。
デバイスはさまざまな方法で有効にでき、デバイスの組み合わせを設定できます。サービスは、ユーザー、起動、ハードウェア状態の変更など、さまざまなイベントによって開始およびトリガーできます。たとえば、一部のハードウェアを接続して5分後に...
必要に応じて、さまざまなカスタマイズのためにシステムタイマーを使用するようにいくつかのファイルと直接タグを設定する方が簡単です。
次の機能により、機能全体を簡単に有効/無効にできます。
systemctl enable/disable
そして働く子供たちをすべて殺しなさい:
systemctl start/stop
systemdタイマーは、カレンダーと単調な時間を使用して予約できます。これは時間帯が異なる場合に便利です。
systemdタイムイベント(カレンダー)はcronよりも正確です(精度は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
CPU使用率の観点から、システムタイマーは経過時間が経過するとCPUを起動しますが、cronはこれをより頻繁に実行します。
実行が完了した時点に基づいてタイマーイベントをスケジュールし、実行間にわずかな遅延を設定できます。
他のプログラムとの通信も注目に値する。時々、他のプログラムがタイマーの状態とそのタスクを知る必要があるかもしれません。
答え2
馬の口から右:https://wiki.archlinux.org/index.php/Systemd/Timers#As_a_cron_replacement
上記のページから抜粋:
特典
タイマーを使用する主な利点は、各タスクに固有のシステムサービスがあるという事実に由来します。これらの利点のいくつかは次のとおりです。
- タイマーに関係なく、作業を簡単に開始できます。これにより、デバッグが簡素化されます。
- 各ジョブは特定の環境で実行するように構成できます(systemd.exec(5)を参照)。
- ジョブを cgroup にリンクできます。
- ジョブは他のシステムデバイスに従って設定できます。
- 簡単なデバッグのために、ジョブはsystemdログに書き込まれます。
ガイドライン
cronでは簡単にできますが、タイマーデバイスだけでは難しいことがあります。
- 複雑さ:systemdを使用してcronジョブを設定するには、2つのファイルを作成して複数のsystemctlコマンドを実行する必要があります。これをcrontabに行を追加することと比較してみてください。
- 電子メール:ジョブが失敗したときに電子メールを送信するためにcronのMAILTOと同じ機能が組み込まれていません。 OnFailure=を使用した同等の設定の例については、次のセクションを参照してください。
答え3
私が持っていくよ最近述べたPOP3の例コメントに。 POP3では、新しいメールの到着を知らせる方法がないので、これは良い例です。 (IMAP アクセスの場合いいえ実際にはIMAPがあるので、タイマーソリューションを使用してください。できるお知らせ! )
クローナ
crontab -e
-e
編集者のために。注:オプションなしで実行すると役に立ちませんが、保存せずにエディタを終了できない場合は、既存のクローン操作がすべてフラッシュされます。 - 既存の課題がある場合、これは確かに作業損失を意味します。
したがって、編集モードで次の行を追加します。
30 14,21 * * * mpop --quiet
mpop
午後2時30分、午後9時30分にご利用いただけます。
理論的には編集も可能です/var/spool/cron/crontabs/username
が、ほとんどのクローンは気づかない。そしてディレクトリ権限は通常、ファイルへの直接アクセスを許可しません。
Cronの操作はデバッグするのにあまり面白くありません。通常、これを信頼し、頻度が正しく設定されるまで、毎分スケジュールをスケジュールします。
それ以外の場合は、繰り返し操作のための非常に高速なインターフェースです。
最近、cronデーモンが実行されていなくても驚かないでください。パッケージsystemd-cron
(少なくともDebianの場合)は、cronユーザーインターフェースを持つシステムタイマーを提供します。このパッケージはcrontab行を透過的に変換し、コマンドラインツールは同じです。 - その逆は決して存在できません。
システムタイマー
loginctl enable-linger
一度だけ実行し、再度実行しないでください。起動時にユーザーモードsystemdが起動することを保証します。それ以外の場合は、最初のログインから開始されます。
systemctl --user edit --full --force mpop.service
systemctl edit mpop.service
次のコマンドを実行して継続的なエラーストリームを取得し、オプションを使用して正しいコマンドラインに案内するメッセージを表示することもできます。
No files found for mpop.service.
Run 'systemctl edit --force --full mpop.service' to create a new unit.
提案されたコマンドを実行すると、ファイルの書き込み権限の問題が明らかになり、システムデーモンを再ロードするためにパスワードが必要です。 - この時点--user
で、ユーザーのsystemdインスタンスと会話を追加することを覚えておく必要があります。注:システムインスタンスを選択することもできますが、ここではこれを説明しません。似ています。
cronとは異なり、ファイルに直接アクセスできますが、パスを直接覚えておく必要があり~/.config/systemd/user/mpop.service
ます。そして場合によってはsystemd --user daemon-reload
必要です。たとえば、ファイルが存在する場合そして荷物を積んだ。systemd --user edit ...
いずれにせよ、デーモンの再ロードが行われるため、これは必要ありません。
したがって、mpop.service
ファイルに以下を追加します。
[Service]
Type=oneshot
ExecStart=mpop --quiet
を使用してテストを実行できますsystemctl --user start mpop
。ここの略語mpop
です。mpop.service
(略語)を使用して詳細を確認するか、systemctl --user status mpop
過去の実行の出力を完了します。journalctl --user -u mpop
-u
--unit
systemdの場合、タイマーはサービスユニットをトリガする別のユニットです。
作る:
systemctl --user edit --full --force mpop.timer
エディタに以下を保存します。
[Timer]
OnCalendar=*-*-* 14,21:30:00
[Install]
WantedBy=timers.target
もっと短く使うこともできますOnCalendar=
。有効にするための明示的な書き込みがないため、Unit=
同じ名前のサービスが使用されます。
サービス(短期)と同様に、タイマー(長期)も最初はオフになります。サービスはタイマーによってアクティブになるので心配しないでください。
それでは、タイマーを有効にするものは何ですか? - ここで[Install]
この部分が作用するようになります。コマンドに関連していますsystemctl --user enable/disable ...
。残念ながら、どちらも良い名前ではありません。
私の考えではありませんが、代わりにセクションと[Hooks]
コマンドを呼び出す必要があります... hook/unhook ...
。理由:
mpop.timer
ファイルが存在しながらタイマーがインストールされました。- セクションとコマンドの関係を明らかにします。
- この
enable
コマンドはそうでないかもしれません〜できるようにするデバイスがサイディングデバイスまたは存在しないサイディングデバイスに接続されている場合(後者の警告メッセージが表示されます)、「有効」と表示されます。 - デバイスには部品が
mpop.service
なく、何もしません。 「アクティブ化」しても「静的」と表示されます。[Install]
enable/disable
これにより、WantedBy=
フックが一般的な状況で始まり、タイマーで使用する必要があるよく知られているターゲットに言及していることがわかります。
今、そして次の手順を実行した後、使用してsystemctl --user list-dependencies default.target
周囲に何が起こっているのかを確認してくださいtimers.target
。
systemctl --user enable mpop.timer # hooks it into the timers.target
systemctl --user start timers.target # this or reboot
私はより良い実践ではなくstart
実行を検討します(両方有効です)。タイマー単位セクションのミスを検出し、再起動される実行パスに近づくのに役立ちます。timers.target
mpop.timer
[Install]
答え4
「systemd タイマー」および「cron」は、「systemd」および「SysV init」と同じです。
systemdを取り巻く無限の議論を知っていますか?しばしば非常に主観的で非常に感情的です。妥当性があるかどうかにかかわらず、賛否両論のほとんどはここでほぼそのまま繰り返すことができます。技術的側面と一見技術的側面に見える側面を含みます。
私はシステムユーザーがcronを介さないとデーモンを起動できなかった時代を覚えています。 cronは毎分実行され、99.9%の時間は、システムが再起動された場合に長期実行プロセスを開始する以外に何もしないスクリプトです。
最近はもっと興味があります。どの上記のユースケース(@ rebootタイマーなど)の適用範囲を確認するには、cronを実行してください。 (または、たとえば、欠落しているジョブを実行する機能...)
タイマーがなくてもSystemdがお手伝いします! –あなたのユースケースは、cronやタイマーを使用せずに最適に解決できます。あなたのユースケースはおそらくシステム提供のフックによって最もよく解決されます。
修正する:OPはPOP3の例を追加しました。 - これでこの質問に答えることができます。