-
Notifications
You must be signed in to change notification settings - Fork 26
Description
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.