Systemd broken network.online target workaround
man systemd.special says:
Units that strictly require a configured network connection should pull in network-online.target (via a Wants= type dependency) and order themselves after it.
Despite that, I ran into a problem: service that requires outside network to be immediately available fails to start with configuration like described in manual:
[Unit]
Wants=network-online.target
After=network-online.target
Here is an ugly workaround for that:
[Unit]
Wants=network-online.target
After=network-online.target
[Service]
ExecStart=sh -c "while ! ip -4 r | grep ^default; do echo waiting for ipv4 default route to appear; sleep 0.5; done"
ExecStart=<actual service here>
If you want not just default route available, but certain IP address:
ExecStart=sh -c "while ! ping -c 1 -W 0.5 <IP>; do true; done"