On Wed, 23 Sep 2020 at 23:39, Orion Poplawski <orion at 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 at 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-interface-to-be-up-before-running-service > > > > 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 at nwra.com > Boulder, CO 80301 https://www.nwra.com/ > > -- Stephen J Smoogen.