web-dev-qa-db-ja.com

Systemdの依存関係と起動順序

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

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

20

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

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

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

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-uiはsystemdのGUIを提供します。 systemdの状態を適切に表示しますが、テキストエディターを使用してユニットファイルを変更する必要があります。

26
Guy Gangemi

次の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に報告する 。これにより、将来のリリースに組み込むことができます。

10
Michael Hampton

/usr/lib/systemd/systemのサービスファイルを変更する方法は2つあります( 例2.ベンダー設定の上書き を参照):

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

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

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

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

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

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

3
eye

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

Requires=dirsrv.target

そして

After=dirsrv.target
3
cturiel