提供しています。
[Unit]
Description=testing
Requires=network-online.target
After=NetworkManager.service
[Service]
SyslogIdentifier=testing
Type=oneshot
ExecStart=test.sh
[Install]
WantedBy=network-online.target
テスト.sh...
#!/usr/bin/env bash
nmcli connection up router.wired
echo ***
nmcli connection show
echo ***
ip route show
出力..
testing[779]: Connection successfully activated (D-Bus active path: /org/freedesktop/Network>
testing[772]: ***
testing[1468]: NAME UUID TYPE DEVICE
testing[1468]: router.wired xxxx ethernet enp1s0
testing[1468]: router xxxx wifi --
testing[772]: ***
ip route show
接続が確立されても出力が表示されないのはなぜですか?電話なしでどのようにこれを行うことができますかnmcli connection up
?
スクリプトからそれをインポートすると、nmcli connection up
システムはとにかくその接続で起動します。この時点で、手動でサービスを呼び出し、デフォルトsudo service test start
ゲートウェイを含む期待される結果を得ることができます。ip route show
満足のいく解決策...
問題は、システムが起動する順序のようです。起動時にサービスを無効にし、代わりにタイマーデバイスを使用して有効にしようとしましたが、正常に動作しOnBootSec=50
ました。私は成功せずnetwork.target
にnetwork-online.target
可能なすべての依存関係を試しましたNetworkManager.service
。
答え1
私の考えでは、ip route
それが早すぎると終了し、systemd-journaldがそれが属するデバイスを正しく検出しなかったようです。調査するグローバル journalctl -b
必要な出力があることを確認してください。 (これは既知の問題です。)
また、しかし:
Requires=
意味ではないAfter=
ため、サービスは実際にnetwork-online.targetに到達するのを待ちません。はっきり言わなければなりませんAfter=network-online.target
。(依存関係が表示されたらAfter =を意味します。~から対象ですが、他の状況ではそうではありません。 )
systemd-networkd-wait-online
デフォルトでは、network-online.targetは実際には空です。たとえば、またはあなたの場合に適切な「待機」サービスを有効にすることはあなた次第ですNetworkManager-wait-online
。後者が有効になっていることを確認してください。それ以外の場合、ターゲットは何もしません。あなたの一方、サービスは次のようにする必要があります。いいえに入ることは
WantedBy=network-online.target
目標の目的ではありません。