Carlos Lopez
2020-Sep-23 08:32 UTC
[CentOS] Systemd service unit file needs to wait until a specific interface is up
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? My host is CentOS8 x86_64. Regards, C. L. Martinez
Tony Mountifield
2020-Sep-23 10:10 UTC
[CentOS] Systemd service unit file needs to wait until a specific interface is up
In article <004E8170-E842-4E8B-9623-DB3EA236DE9F at outlook.com>, 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?Just add a line to the tcpdump script to wait for the interface. Something like this: until ifconfig -s | grep -q '^bond0' ; do sleep 1 ; done Cheers Tony -- Tony Mountifield Work: tony at softins.co.uk - http://www.softins.co.uk Play: tony at mountifield.org - http://tony.mountifield.org
Stephen John Smoogen
2020-Sep-23 13:07 UTC
[CentOS] Systemd service unit file needs to wait until a specific interface is up
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)> My host is CentOS8 x86_64. > > > Regards, > C. L. Martinez > > _______________________________________________ > CentOS mailing list > CentOS at centos.org > https://lists.centos.org/mailman/listinfo/centos >-- Stephen J Smoogen.
Carlos Lopez
2020-Sep-23 14:08 UTC
[CentOS] Systemd service unit file needs to wait until a specific interface is up
Perfect!! Many thanks Stephen. Works like a charm. ?On 23/09/2020, 15:08, "CentOS on behalf of Stephen John Smoogen" <centos-bounces at centos.org on behalf of smooge at gmail.com> 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) > My host is CentOS8 x86_64. > > > Regards, > C. L. Martinez > > _______________________________________________ > CentOS mailing list > CentOS at centos.org > https://lists.centos.org/mailman/listinfo/centos > -- Stephen J Smoogen. _______________________________________________ CentOS mailing list CentOS at centos.org https://lists.centos.org/mailman/listinfo/centos
Orion Poplawski
2020-Sep-24 03:39 UTC
[CentOS] Systemd service unit file needs to wait until a specific interface is up
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. This works for Carlos though because he doesn't need an IP address - just the device existing. 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. -- 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/
Seemingly Similar Threads
- Systemd service unit file needs to wait until a specific interface is up
- Systemd service unit file needs to wait until a specific interface is up
- Systemd service unit file needs to wait until a specific interface is up
- Systemd service unit file needs to wait until a specific interface is up
- NetworkManger creates extra bonds; is this a bug?