現象の確認
/var/log/syslog に次のようなエラーがあれば、本記事の対象です。
systemd-networkd-wait-online は起動時に、各ネットワークインタフェース(eth0やwlan0等)のネットワーク接続確立を待ちます。接続確立しないインタフェースがあると、タイムアウト待ちによって Ubuntuの起動が遅延します。
たとえば、無線LANのSSIDに接続しない、無線LANインタフェースがある場合です。
ubuntu systemd-networkd-wait-online[685]: Timeout occurred while waiting for network connectivity.
次のようにして手動で systemd-networkd-wait-online を実行してみます。
SYSTEMD_LOG_LEVEL=debug /usr/lib/systemd/systemd-networkd-wait-online
2分後くらいに次のように「Timeout occurred while waiting for network connectivity.」の表示が出ます。
Found link 3
Found link 2
Found link 1
wlan0: link is not managed by networkd (yet?).
lo: link is ignored
eth0: link is ignored
Timeout occurred while waiting for network connectivity.
対処
タイムアウトしているネットワークインターフェイスの確認
次のように networkctl コマンドを実行すると、ネットワークインターフェイスの状態が一覧で表示されます。
# networkctl
IDX LINK TYPE OPERATIONAL SETUP
1 lo loopback carrier unmanaged
2 eth0 ether routable configured
3 wlan0 wlan off unmanaged
表示された結果で、SETUP列が unmanaged で、LINK列が lo 以外のもの(この例では wlan0)を、次のように --
ignore= で指定してsystemd-networkd-wait-online を実行します。
SYSTEMD_LOG_LEVEL=debug /usr/lib/systemd/systemd-networkd-wait-online --ignore=wlan0
次のような表示がすぐ出たらOKです。
Found link 3
Found link 2
Found link 1
eth0: link is ignored
wlan0: link is ignored
lo: link is ignored
systemd-networkd-wait-online の起動設定へ反映
/usr/lib/systemd/system/systemd-networkd-wait-online.service を修正します。
次のように ExecStart 行で、先ほど確認したタイムアウトしているネットワークインターフェイスを、--
ignore= で指定します。
変更前)
ExecStart=/lib/systemd/systemd-networkd-wait-online
変更後)
ExecStart=/lib/systemd/systemd-networkd-wait-online --ignore=wlan0
反映させます。
systemctl daemon-reload
systemctl restart systemd-networkd-wait-online
これで起動時に systemd-networkd-wait-online で止まることが無くなります。
参考
Linuxサーバ起動時のsystemd-networkd-wait-onlineの待機を解除する #ubuntu20.04 – Qiita
Ubuntu jammy -> mantic で systemd-networkd-wait-online がタイムアウト #Ubuntu – Qiita
コメント