Skip to content

Ability to specify dependence of service on network #35

@andrewdavidmackenzie

Description

@andrewdavidmackenzie

I use service-manager (thanks!) across windows, macos and linux - including on Raspberry Pi.

When I install my app binary as a service on Raspberry Pi (Pi Zero W), it works fine until reboot.

Looking at logs of systemd after rebooth using systemctl list-units -t service I see:

.....many previous repititions of failure....

Mar 31 16:25:51 pizero systemd[1]: Started mackenzie-serres-pigg.piglet.service - mackenzie-serres-pigg.piglet.
Mar 31 16:25:52 pizero piglet[477]: Config loaded from file: /home/andrew/.piglet_config.json
Mar 31 16:25:52 pizero piglet[477]: [ERROR tracing::span] magicsock;
Mar 31 16:25:52 pizero piglet[477]: nodeid: bea9da056b21c75d9544d68595feae4b12683acb595c3160bd4cccebee24a61d
Mar 31 16:25:52 pizero piglet[477]: Relay URL: https://use1-1.relay.iroh.network./
Mar 31 16:25:52 pizero piglet[477]: Error: The Local IP Address wasn't available in the network interfaces list/table
Mar 31 16:25:52 pizero systemd[1]: mackenzie-serres-pigg.piglet.service: Main process exited, code=exited, status=1/FAILURE
Mar 31 16:25:52 pizero systemd[1]: mackenzie-serres-pigg.piglet.service: Failed with result 'exit-code'.
Mar 31 16:25:52 pizero systemd[1]: mackenzie-serres-pigg.piglet.service: Scheduled restart job, restart counter is at 8.
Mar 31 16:25:52 pizero systemd[1]: Stopped mackenzie-serres-pigg.piglet.service - mackenzie-serres-pigg.piglet.
Mar 31 16:25:52 pizero systemd[1]: Started mackenzie-serres-pigg.piglet.service - mackenzie-serres-pigg.piglet.
Mar 31 16:25:53 pizero piglet[483]: Config loaded from file: /home/andrew/.piglet_config.json
Mar 31 16:25:53 pizero piglet[483]: [ERROR tracing::span] magicsock;
Mar 31 16:25:53 pizero piglet[483]: nodeid: 15bd59874736d440066d88b81825082d2072267c8086eea3a8edf012fdb94112
Mar 31 16:25:53 pizero piglet[483]: Relay URL: https://use1-1.relay.iroh.network./
Mar 31 16:25:53 pizero piglet[483]: Error: The Local IP Address wasn't available in the network interfaces list/table
Mar 31 16:25:53 pizero systemd[1]: mackenzie-serres-pigg.piglet.service: Main process exited, code=exited, status=1/FAILURE
Mar 31 16:25:53 pizero systemd[1]: mackenzie-serres-pigg.piglet.service: Failed with result 'exit-code'.
Mar 31 16:25:53 pizero systemd[1]: mackenzie-serres-pigg.piglet.service: Scheduled restart job, restart counter is at 9.
Mar 31 16:25:53 pizero systemd[1]: Stopped mackenzie-serres-pigg.piglet.service - mackenzie-serres-pigg.piglet.
Mar 31 16:25:53 pizero systemd[1]: mackenzie-serres-pigg.piglet.service: Start request repeated too quickly.
Mar 31 16:25:53 pizero systemd[1]: mackenzie-serres-pigg.piglet.service: Failed with result 'exit-code'.
Mar 31 16:25:53 pizero systemd[1]: Failed to start mackenzie-serres-pigg.piglet.service - mackenzie-serres-pigg.piglet.

My understanding is that the service fails to start because it can't get it's own IP (I use local-ip-address crate) as the network is not yet up (and connected to wifi and a DHCP IP assigned I assume), and after a number of failures it stops trying.

I could try and build in some retries and delays in my app, but reading articles like https://unix.stackexchange.com/questions/257888/systemd-wait-for-network-interface-to-be-up-before-running-service and https://bbs.archlinux.org/viewtopic.php?id=166618 it seems there are ways to define dependencies on such things in service startup.

Is there any way to do that in service-manager?

I expect I'd have to drop down to a specific systemd-manager on linux.... but a generic "This service needs network before starting" flag would be a boon, and portable (with different implementations) across platforms.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requesthelp wantedExtra attention is needed

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions