On Sat, Mar 20, 2021 at 08:48:45AM -0500, Nic Bernstein wrote: > > I can put After=network-online.target in the service description, but > > seems odd that I have to... any other suggestions? > > > > You've got the correct answer right there; "After=network-online.target". > When you don't specify a bind address, cyrus uses 0.0.0.0, initially getting > just 127.0.0.1. As any new interfaces come online, it will bind to them. > But if you give it a specific IP, and that IP isn't available, cyrus exits. > Had you also given it 127.0.0.1, that might have worked, but I've not tried > it. > > FWIW, my Debian-based service unit has this: After=local-fs.target > network.target > which seems correct to me. No, network.target does not really guarantee anything during startup. network.target is useful mostly via shutdown, to ensure networked services are stopped before the network is brought down. network-online.target is also not necessarily enough, because it is not well defined what does "online" mean. E.g., _IF_ you use NetworkManager, _and_ you've configured the proper connection with "may-fail: no", _and_ the connection comes up before NetworkManager-wait-online.service would time out, _then_ After=network-online.target will do what you want. But if any of the above conditions are not true, then you may still get the same error. Of course, you may write your own systemd unit which comes before network-online.target, and then you can freely define what does "the network is online" mean for your specific setup. The only robust solution which would not depend on anything outside of Cyrus would be making "master" listen on netlink for interface events, and open the listening socket only when the reqired IP address becomes available. Regards, Gabor ------------------------------------------ Cyrus: Info Permalink: https://cyrus.topicbox.com/groups/info/Te727080483918be4-Mdb28554e69c1b8910a98977c Delivery options: https://cyrus.topicbox.com/groups/info/subscription