リリース後、Systemd basic.targetについて学ぶ

リリース後、Systemd basic.targetについて学ぶ

ここで私の質問は、basic.targetCentOS 7サーバーを起動したときに何が起こるのかを理解することです。

私はSystemdについて私が知っていることが正しいと思います。

  • Requires=unit2つまり、一部はすべて成功した場合にのみ有効になりますunit1unit2

  • Wants=unit2unit1リストされているUnit2が成功したかどうかにかかわらず、一部が有効になっていることを示します。

  • After=unit2unit1一部は、Unit2が有効になってからのみ有効になることを意味します。

  • Systemdの操作は通常並列に開始されます。

  • .target主に「グループ化」と「ソート」に使用されます(参照systemd.target)

  • 実際には、(サーバーのデフォルトのランレベルである)basic.target(そして必要で必要なもの)に達する前にアクティブにする必要があります。multi-user.target

まあ、今まで私は正しいことを願っています。


それでは、次を見つけてくださいbasic.target

$ sudo cat /usr/lib/systemd/system/basic.target

[Unit]
Description=Basic System
Documentation=man:systemd.special(7)

Requires=sysinit.target
After=sysinit.target
Wants=sockets.target timers.target paths.target slices.target
After=sockets.target paths.target slices.target

今私の説明は次のとおりです。

  1. basic.targetのみ有効後ろに sysinit.targetすでに成功

  2. また、走ることがbasic.targetできることを願っています。sockets.target

  3. 追加After=手段は、、活性化後にbasic.target活性化してください。失敗しても大丈夫です。sockets.targetpaths.targetslices.targettimers.target

  4. それでは、2つを1つにまとめてみてはいかがでしょうかAfter=。 (除く)Require=代わりに使用しないのはなぜですか?Wantstimers.target

答え1

4番目の項目の質問が目立っており、残りは背景として使用されます。

なぜ2つをAfter=1つにまとめないのですか?

After=両方のガイドラインの組み合わせを妨げる技術的な理由はありません。 、およびの単位順序は重要ではAfter=ありません。他のファイル(オーバーレイなど)からインポートすることも、スキャン用にセットに追加することもできます。したがって、マージするかどうかは、テンプレートの読みやすさや使いやすさなどの要素に基づいて決定できます。Wants=Requires=

(除く)Require=代わりに使用しないのはなぜですか?Wants=timers.target

ターゲットの起動をトリガーしますが、basic.target一部の依存ターゲットが失敗しても失敗しません。

これは逆でありRequires=sysinit.target、起動をトリガし、sysinit.target失敗するとbasic.target失敗しますsysinit.target

依存デバイスの起動をトリガRequires=します。Wants=

(これは彼らの欲望とニーズを引き起こし、木の下にカスケードで降ります)。違いは、必要なサービスが開始されない場合に発生することです。サービスが存在しないか開始できない場合、Requires=そのサービスのすべてのサービスも開始されません。ただし、Wants=失敗したサービスは引き続き開始されます。たとえば、現在の設定で何らかの理由で失敗した場合は、paths.targetアクセスを続けることができますが、使用するとアクセスできません。slices.targetbasic.targetWants=Requires=

After=一方、開始順序のみが指定されます。

和がsome.serviceない場合を考えてください。ただし、システムではそうではありません。欠落している項目を無視して正常に起動します。システムにあるが起動できない場合は、起動を待ってからとにかく起動します。After=postres.serviceWants=Requires=postgres.servicesome.servicepostres.servicepostres.servicesome.servicepostres.service

有効にするかどうかは重要ではありませんsome.service。有効にしていない場合は、手動で起動すると起動を試みずに起動しますpostres.service

Requires=postres.serviceまたはを追加するWants=postres.serviceと、some.service何らかの方法で起動しても起動しますpostres.servicesome.serviceその場合、起動エラーがpostres.service原因で起動エラーRequires=も発生します。some.service

Requires=なしで指定するとAfter=完全にはわかりません。私の考えはsystemd同時に始まり、失敗してもpostres.service何の影響もありません。

**しかし、場合があると確信しています。単に指定せずにsome.serviceシステムにこのエントリがない場合、起動試行は失敗します。Requires=postres.serviceAfter=postres.servicepostres.servicesome.service

これが別のサービスを開始する前に、あるサービスが正常に開始されたことを確認したい場合は、通常と両方を使用する理由ですRequires=After=

関連情報