Systemdの依存関係と起動順序


20

プロセスを開始するためのブート順序を指定する必要があります。Fedora 18で389のDirectory ServerとSambaを実行しています。ネットワークサービス、389 DS、Sambaを起動するにはどうすればよいですか?Fedoraでこれを管理するGUIはありますか?

Sambaをで開始できるようにしましたsystemctl enable smb.service。で389 DSも有効にしましたsystemctl enable dirsrv.target


Systemdはサービス間の順序を必要としません。アイデアはすべてを並行して開始し、利用可能になったときにサーバーに接続を渡すことです。デフォルトのインストールで指定された構成で問題ありません。なぜ順序を定義する必要があると思いますか?何かが機能しませんか?
フォンブランド

また、これが戻ってきたので、ドメインコントローラーでファイル/印刷サービスを実行しないでください。
マイケルハンプトン

@vonbrand私はこの問題を抱えていました。DHCPサーバーが起動するためにslapdが必要でした(その設定はLDAPディレクトリに保存されていたため)。そうでない場合、DHCPサーバーは起動しません。
マット

回答:


25

systemctl edit smb.service依存関係を更新するために使用します。

After=dirsrv.target -smb.serviceがdirsrv.targetの後に確実に開始されるようにします。

堅牢性のために(これをいじくり回している間は価値があります)、次のいくつかを含めることもできます。

Requires=dirsrv.target-smb.serviceがアクティブになったときにdirsrv.targetをアクティブにします。dirsrv.targetが失敗すると、smb.serviceが失敗します。

Wants=dirsrv.target-smb.serviceがアクティブになったときにdirsrv.targetをアクティブにします。dirsrv.targetが失敗してもsmb.serviceが失敗することはありません。

BindsTo=dirsrv.target -dirsrv.targetが非アクティブ化されている場合、smb.serviceを非アクティブ化します。

ソース:http : //www.freedesktop.org/software/systemd/man/systemd.unit.html

systemd-uisystemdのGUIを提供します。systemdの状態はよくわかりますが、ユニットファイルを変更するにはテキストエディターを使用する必要があります。


AがBを必要とする場合、Aが開始されないように「B」が「失敗」したとはどういうことでしょうか?Bのプログラムはゼロ以外の値を返しますか?
ジョンワン

2
これは悪い習慣を勧めているため、ダウン投票。/usr/lib/systemdディストリビューションのメンテナーであるか、パッケージの更新ごとにファイルが上書きされるのを楽しんでいない限り、ユニットファイルのバージョンを編集しないでください。ユニットファイルをコピーして/etc/systemd編集するか、ドロップインファイルを使用します(詳細については、systemd.unit(5)を参照してください)。さらに簡単に、systemctl edit smb.serviceドロップインファイルマジックを自動的に行うものを使用するだけです!
ジェレミーフィッサー

3
回答を編集していただきありがとうございます!それは懸念を解決し、私は賛成票に転換しました。:-)
ジェレミー・ヴィッサー

10

2つのことを行います。

  1. /lib/systemd/system/smb.serviceユニットファイルを編集して、依存関係を指定します。[unit]セクションには、このAfter=サービスの前に到達する必要があるサービス/ターゲットを指定する行が含まれています。

    After=syslog.target network.target nmb.service winbind.service
    

    次のように変更します。

    After=dirsrv.target syslog.target network.target nmb.service winbind.service
    
  2. この依存関係をバグとしてFedoraに報告し、将来のリリースに組み込むことができるようにします。


それはうまくいかないようです。Sambaはまだ389の前に起動している
ディランKlomparens

3
unitファイルを変更した後、通常実行する必要がありますsystemctl daemon-reload
スコッティセウス

2

ファイルの セクションにあるRequiresディレクティブを含む行を変更または含める必要がある場合[Unit]があり/usr/lib/systemd/system/smb.serviceます。

Requires=dirsrv.target

そして

After=dirsrv.target

さて、私はこの答えに投票しましたが、個人的にはRequires =ではなくWants = dirsrv.targetを使用します。(Wants =についてはsystemd.unit(5)を参照)
銀河14

2

サービスファイルを変更するには、2つの選択肢があります/usr/lib/systemd/system例2.ベンダー設定のオーバーライドを参照)。

  1. ファイルをコピーし、コピー/etc/systemd/systemに対して変更を実行します。このファイルは、のファイルを完全に上書きします /usr/lib

  2. ファイルを作成します/etc/systemd/system/smb.service.d/local.conf。ファイルの内容は、次の例のようになります。これにより、ベンダーが提供するサービスファイルの「Requires」および「After」オプションが選択的にオーバーライドされます。

これらのそれぞれ(のファイルの変更を含む/usr/lib)には長所と短所があります。最適な選択は、サービスと変更の性質によって異なります。

動作する可能性はありますが、「After」オプションを追加するだけでは不十分です([Unit]セクションオプションを参照)。「後」は順序を制御しますが、依存関係は制御しません。dirsrv.target他の方法で開始されていない場合、順序を指定しても開始されません。「Requires」または「Wants」オプションを使用すると、強制的dirsrv.targetに開始されます。

[Unit]
Requires=dirsrv.target
After=dirsrv.target

NB:この質問が最初に尋ねられたときにこのアプローチが利用可能だったかどうかわかりません。

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