インターネットへのアクセスが必要なユーザーランド バックアップ スクリプトで、同じ問題が発生していました。 ~/.config/systemd/user/wait-for-network.service
を追加して解決しました google.com
を ping するだけです 到達可能になるまで:
[Unit]
Description=Ping a server on the internet until it becomes reachable
[Service]
Type=oneshot
ExecStart=/bin/bash -c 'while ! ping -c1 google.com; do sleep 1; done'
TimeoutStartSec=60s
次に、バックアップ スクリプトを次のように依存させました。
[Unit]
Description=...
Requires=wait-for-network.service
After=wait-for-network.service
これは、 NetworkManager
を使用するかどうかに関係なく機能します または接続を確立するための他の手段。
network.target
は忘れてください . man systemd.special
言います:
network.target systemd automatically adds dependencies of type After for this target unit to all SysV init script service units with an LSB header referring to the $network facility.
したがって、このターゲットは主に SysV init スクリプトの互換性ハックです。
ネットワーク接続が NetworkManager によって処理されていると仮定すると、NetworkManager.service
であるため、このターゲットに依存するのは当然のことです。 Before=network.target
を定義 .ただし、これは NetworkManager が開始されたことを意味するだけであり、ネットワーク接続が実際に確立されたことを意味するわけではありません。これにはしばらく時間がかかる場合があり (dhcp ラウンドトリップ、wifi ハンドシェイクなど)、これは完全に NetworkManager の仕事です。少なくとも私のシステム (F18) には NetworkManager-wait-online
というサービスがあります . nm-online
を使用します アクティブな接続が確立されるまでブロックするユーティリティ プログラム。 Require, Before
してみてください ユニット定義でそれを使用するか、そのツールを単独で使用してください。