'Twas brillig, and Sage Weil at 03/07/13 04:06 did gyre and gimble: > Hi everyone, > > I have a sysvinit script on fedora 18 (systemd 195) with > > ### BEGIN INIT INFO > # Provides: ceph > # Default-Start: 2 3 4 5 > # Default-Stop: 0 1 6 > # Required-Start: $remote_fs $named $network $time > # Required-Stop: $remote_fs $named $network $time > # Short-Description: Start Ceph distributed file system daemons at boot time > # Description: Enable Ceph distributed file system services. > ### END INIT INFO > > and my daemon keeps failing on startup to bind to it's ip:port. I > modified the script to dump systemctl -a output and I see > > network.service loaded inactive dead LSB: Bring up/down networking > NetworkM...online.service loaded inactive dead Network Manager Wait Online > NetworkManager.service loaded active running Network Manager > > I know next to nothing about systemd (or Fedora, for that matter), but I > would expect the $network bit in Required-Start to make the job wait for > network.service. Almost, but not quite! Anything prefixed with a $ in LSB headers doesn't refer to a single service, but rather a collection of services all working towareds providing that. Some LSB headers may have "Provides: $network" for example. In systemd, this concept is generally translated to "targets" and thus $network actually corresponds to network.target in systemd, not network.service. More info here: http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/ In your setup (from the output above) it looks like network.service is actually disabled and you're using NetworkManager.service instead to initialise your network. When this happens network.target will be complete pretty much at the same moment that NetworkManager has finished starting. This is because network.target doesn't have any built in knowledge of when a network is considered "up" (see the link above for several examples of what different people may consider "up"). In order to actually wait for your network to be up, you need to enable the NetworkManager-wait-online.service. This will then delay the point at which network.target becomes started until after that service exits. This should cause your network dependant service to be started later and you'll be happy! Of course this doesn't help when the network disappears and comes back later, so the *real* solution here is to patch ceph to be aware of the rtnetlink events. It then doesn't have any solid dep on a fairly loosely defined and unreliable "point in time" when the network is ready and remains available forever more! Hope that helps. Col -- Colin Guthrie gmane(at)colin.guthr.ie http://colin.guthr.ie/ Day Job: Tribalogic Limited http://www.tribalogic.net/ Open Source: Mageia Contributor http://www.mageia.org/ PulseAudio Hacker http://www.pulseaudio.org/ Trac Hacker http://trac.edgewall.org/ -- To unsubscribe from this list: send the line "unsubscribe ceph-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html