Hi Tomas, Tomas Volf <~@wolfsden.cz> skribis:
> (start #~(lambda _ > (let* ((cmd "/run/privileged/bin/ping -qc1 -W1 1.1.1.1") > (status (system cmd))) > (= 0 (status:exit-val status))))) > (one-shot? #t) > ;; Try every second. > (respawn-delay 1) > ;; Retry forever. Double-quoting is intentional. > (respawn-limit ''(5 . 5))))) [...] > Nov 7 00:18:20 localhost shepherd[1]: Starting service network-online... > [..] > Nov 7 00:18:20 localhost shepherd[1]: [sh] PING 192.168.0.110 > (192.168.0.110): 56 data bytes > Nov 7 00:18:20 localhost shepherd[1]: [sh] /run/privileged/bin/ping: sending > packet: Network is unreachable > Nov 7 00:18:20 localhost shepherd[1]: Service network-online could not be > started. > Nov 7 00:18:20 localhost shepherd[1]: Service network-online failed to start. I think there’s a misunderstanding here: ‘respawn?’ is about respawning a service that, once it is running, terminates prematurely. In your case, the service does not start (its ‘start’ method returns #f). Now, it would probably make sense to have a mechanism to retry starting services. In the specific case of ‘network-online’ though, you could use a different approach: the ‘start’ method could itself try retry pinging the network several times and fail only if it failed to reach the network after, say, 10s. (Remember that ‘start’ and ‘stop’ must complete in a timely fashion.) HTH, Ludo’.