ネットワークが開始する前にsystemdサービスを開始する方法は?


11

ネットワーク構成が格納されているマウントをセットアップする必要がある新しいサービス(Debian Jessieの下)をセットアップしようとしているため、networking.serviceが開始する前にこのサービスを完了する必要があります。

私は次を試しました:

[Unit]
Description=mount/repair remaining filesystems (all persistent fs beyond "/")
#Before=network-pre.target
Before=networking.service

[Service]
Type=oneshot
ExecStart=/opt/intermodul-mounts/start.sh
TimeoutSec=0
RemainAfterExit=yes

[Install]
RequiredBy=networking.service

を使用systemd-analyze plotすると、サービスが開始されていることがわかりますが、networking.service約3秒早く開始されます。

ここに画像の説明を入力してください

どうやら私の設定は間違っていますが、問題を見つけるのに苦労しています...どんな助けも大歓迎です。

更新

私は現在、local-fs.target代わりにサービス設定を前に開始するように変更することで解決しましたnetworking.service

[Unit]
DefaultDependencies=no
Description=mount/repair remaining filesystems (all persistent fs beyond "/")
Before=local-fs.target

[Service]
Type=oneshot
ExecStart=/opt/intermodul-mounts/start.sh
TimeoutSec=0
RemainAfterExit=yes

[Install]
RequiredBy=local-fs.target

それでも、なぜ私の最初の構成が期待どおりに機能しなかったのか理解したいのですが...?


systemdの動作方法により、物事が実行される文字通りの時間的順序は重要ではない場合があります。ネットワークが起動したとき、そのディレクトリ内のファイルに従って正常に機能していますか?
トム・ハント

私はあなたの質問を理解したかわかりません。とにかく、別のパーティション/etc/network/interfacesにあるip-upスクリプトへの参照があります。そのパーティションは、複雑なスクリプトで実装されている必要がありますネットワークが設定される前に実行されます。現在、スクリプトは起動時にアクセスできないため、効果的に開始されません。その後実行すると、すべてのインターフェースが正しく表示されます。/opt/intermodul-mounts/start.ship-upservice networking restart
Udo G

回答:


8

network-pre.targetは、ネットワークインターフェイスが設定される前にサービスを注文するために使用できるターゲットです。主な目的は、ネットワークインターフェイスが起動する前にファイアウォールを確立したいファイアウォールサービスで使用することです。これはパッシブユニットです。直接開始することはできず、ネットワーク管理サービスではなく、その前に実行したいサービスによって引き込まれます。

network-pre.targetネットワークが始まる前に何かを設定したい場合に使用します

ネットワークを構成する前に実行するサービスは、Before = network-pre.targetを配置し、Wants = network-pre.targetを設定してプルする必要があります。

これらを[Unit]セクションの下に置く必要があります:

Before=network-pre.target
Wants=network-pre.target

参照


1
@edwardtorvaldsさん、ネットワーク設定のセットアップでこれを正確に行っていましたが、ユニットが実行されていないようです。への答えsystemctl is-enabled <unit>は常にstaticです。もちろん、がないので有効にできませんWantedBy=。結局のところ、それは何を求めているのでしょうか。これは、ネットワークが読み込まれる前にいくつかの設定を行うものです。
16

= remote-fs.targetまたはmount-fs.targetで希望を試すことができます。
Edward Torvalds

2
ありがとう。結局私はやったBefore=network-pre.targetWants=network-pre.targetそして[Install]我々のためにやったWantedBy=network.target。最後のセクションでは、それをネットワーキングで必須にすることを強制し、前者はそれを整理しました。しかし、苦痛でした
deitch

あなたは間違いなく私よりはるかに優れたsystemdを持っているので、私が持っている他のqを見ることができますか?unix.stackexchange.com/questions/277783/…まだその方法を理解しようとしています。
16

暗号化されたパーティションを使用した経験がないので混乱しています。できればそれをお願いします
Edward Torvalds

3

Debian Jessieで行われたように、netfilter-persistentパッケージ(ネットワークが起動する前にiptablesルールをロードすることを許可)には、次のようなnetfilter-persistent.serviceがあります。

# https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/
# based on the netfilter-persistent package
[Unit]
Description=netfilter persistent configuration
DefaultDependencies=no

Before=network-pre.target
Wants=network-pre.target

Wants=systemd-modules-load.service local-fs.target
After=systemd-modules-load.service local-fs.target

Conflicts=shutdown.target
Before=shutdown.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/sbin/netfilter-persistent start
ExecStop=/usr/sbin/netfilter-persistent stop

[Install]
WantedBy=multi-user.target

なぜそれと矛盾するのshutdown.targetですか?
Alexis Wilke

1

間違いは簡単で、私はいつもミックス主なものの一つです:あなたは混ぜるBeforeRequiredBy。それは一緒にはいきません。他はターゲットについて正しいです。


0
[Unit]
Description=mount/repair remaining filesystems (all persistent fs beyond "/")
DefaultDependencies=no
After=sysinit.target local-fs.target
Before=basic.target

[Service]
Type=oneshot
ExecStart=/opt/intermodul-mounts/start.sh
TimeoutSec=0
RemainAfterExit=yes

[Install]
WantedBy=basic.target

これらの線に沿って何かを行うと、このユニットがネットワークの前に実行されていることを確認できますが、他の重要なセットアップの大部分が実行された後です。

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