ここで私の質問は、basic.target
CentOS 7サーバーを起動したときに何が起こるのかを理解することです。
私はSystemdについて私が知っていることが正しいと思います。
Requires=unit2
つまり、一部はすべて成功した場合にのみ有効になりますunit1
。unit2
Wants=unit2
unit1
リストされているUnit2が成功したかどうかにかかわらず、一部が有効になっていることを示します。After=unit2
unit1
一部は、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
今私の説明は次のとおりです。
basic.target
のみ有効後ろにsysinit.target
すでに成功また、走ることが
basic.target
できることを願っています。sockets.target
追加
After=
手段は、、活性化後にbasic.target
活性化してください。失敗しても大丈夫です。sockets.target
paths.target
slices.target
timers.target
それでは、2つを1つにまとめてみてはいかがでしょうか
After=
。 (除く)Require=
代わりに使用しないのはなぜですか?Wants
timers.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.target
basic.target
Wants=
Requires=
After=
一方、開始順序のみが指定されます。
和がsome.service
ない場合を考えてください。ただし、システムではそうではありません。欠落している項目を無視して正常に起動します。システムにあるが起動できない場合は、起動を待ってからとにかく起動します。After=postres.service
Wants=
Requires=
postgres.service
some.service
postres.service
postres.service
some.service
postres.service
有効にするかどうかは重要ではありませんsome.service
。有効にしていない場合は、手動で起動すると起動を試みずに起動しますpostres.service
。
Requires=postres.service
またはを追加するWants=postres.service
と、some.service
何らかの方法で起動しても起動しますpostres.service
。some.service
その場合、起動エラーがpostres.service
原因で起動エラーRequires=
も発生します。some.service
Requires=
なしで指定するとAfter=
完全にはわかりません。私の考えはsystemd
同時に始まり、失敗してもpostres.service
何の影響もありません。
**しかし、場合があると確信しています。単に指定せずにsome.service
システムにこのエントリがない場合、起動試行は失敗します。Requires=postres.service
After=postres.service
postres.service
some.service
これが別のサービスを開始する前に、あるサービスが正常に開始されたことを確認したい場合は、通常と両方を使用する理由ですRequires=
。After=