On Wed, 23 Sep 2020 at 23:39, Orion Poplawski orion@nwra.com wrote:
On 9/23/20 7:07 AM, Stephen John Smoogen wrote:
On Wed, 23 Sep 2020 at 04:33, Carlos Lopez clopmz@outlook.com wrote:
Hi all,
With SystemD, how can I make certain service dependent on certain
network
interfaces being up?
For example, I have an 802.1ad bond interface I need to wait on for
being
up (this interface has no ip address assigned, it is used to capture networks packets with a tcpdump’s script). Every time this service fails because bond interface is not up.
I have configured the service as:
[Unit]
Description=tcpdump capture script
After=network.target
Wants=network-online.target
But it doesn’t work …. Any tip or trick?
So the network just calls the scripts and exits so they can take a while
to
get working. I think this website covers what you want to do
https://unix.stackexchange.com/questions/257888/systemd-wait-for-network-int...
systemctl list-units --no-pager | grep subsystem-net
Then look for the device which matches the one you are listening to.
Change
the After=network.target to
BindsTo=sys-devices-virtual-net-<device>.device After=sys-devices-virtual-net-<device>.device
where <device> is the interface you found (aka eth2, br9, bond0 etc)
Hmm, there seems to be several layers here.
I think sys-devices-<device>.device is "started" when <device> appears in the kernel:
Sep 23 19:37:25 kernel: virtio_net virtio0 ens3: renamed from eth0
# systemctl status sys-subsystem-net-devices-ens3.device ● sys-subsystem-net-devices-ens3.device - Virtio network device Loaded: loaded Active: active (plugged) since Wed 2020-09-23 19:37:25 MDT
This is not what most people would consider "up" - i.e. have an IP address. ens3 doesn't get it's IP address until much later.
Oh good point. I didn't think about that.
This works for Carlos though because he doesn't need an IP address - just the device existing.
It may or may not.. I just realized that the device may need to get recognized by a switch etc which on a bond may take time.
I have no idea how it worked for the stackexchange poster. Apparently because "lan0" is a virtual device as well ("sys-devices-virtual-net-lan0") that they need, not a more "physical" device like "net-devices-ens3", and it gets an IP address at the same time as creation.
I've been dealing with issues like this for a while - systems with multiple interfaces, some of which do not come up for quite a while, and I need to wait for all to be up before running certain tasks. Still haven't found anything very satisfactory.
All good points. Thank you for that douse of reality.
-- Orion Poplawski Manager of NWRA Technical Systems 720-772-5637 NWRA, Boulder/CoRA Office FAX: 303-415-9702 3380 Mitchell Lane orion@nwra.com Boulder, CO 80301 https://www.nwra.com/