
ネットワーク設定を保存するいくつかのマウントを設定する必要がある新しいサービス(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
しかし、なぜ最初の設定が期待どおりに機能しないのか知りたいのですが…?
答え1
network-pre.targetは、ネットワークインターフェイスが設定される前にサービスを注文するために使用できるターゲットです。主な目的は、ネットワークインターフェイスが起動する前にファイアウォールを設定したいファイアウォールサービスで使用することです。これは受動的なデバイスです。直接起動できず、ネットワーク管理サービスではなく、以前に実行したいサービスを介して取得します。
network-pre.target
ネットワークが起動する前にいくつかの設定を実行するには、以下を使用する必要があります。
ネットワークが構成される前に実行するサービスは、Before = network-pre.targetと入力し、Wants = network-pre.targetを設定してインポートする必要があります。
[Unit]
これを次のセクションに入れる必要があります。
Before=network-pre.target
Wants=network-pre.target
答え2
Debian Jessieと同様に、netfilter-perciousパッケージ(ネットワーク起動前にiptablesルールをロードできるようにする)には、次のものがあります。ネットフィルター - 持続的。サービス次のようになります。
# 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
答え3
間違いは簡単で、私が頻繁に混同する主なものの1つはBefore
aと混合することRequiredBy
です。そうではありません。他の人は目標について正しいです。
答え4
[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
これらの行に基づいてタスクを実行すると、デバイスはネットワークの前に実行されますが、他のほとんどの重要な設定が発生した後に実行されます。