[systemd-devel] ExecRestart
"Jóhann B. Guðmundsson"
johannbg at gmail.com
Thu Nov 29 11:12:36 PST 2012
On 11/29/2012 04:41 AM, Brandon Black wrote:
>
> Hi all,
>
> I'm trying to write a systemd.service unit file for an existing
> well-behaved daemon that's used to managing itself. The daemon binary
> doubles as its own controller for sysvinit-like command. For example
> "foo start" launches a new daemon. "foo stop" stops an existing
> instance of the daemon. Similarly for restart, condrestart, status,
> etc. This makes things very simple in the world of sysv-like init
> systems. The "initscript" just execs the daemon binary and passes on
> the user action argument, and all of the tricky bits are well-managed
> within the daemon's own code (pidfiles, sockets, logging, strange
> corner cases, timing issues, etc).
>
> I can't simply convert the daemon to expect all of systemd's nice
> features and gut all of its self-management code, as it must still be
> portable to non-systemd platforms where these features are handy. For
> the most part I've been able to successfully work around things, but
> lack of an ExecRestart is one of my remaining hangups.
>
> I certainly can publish a unit file without this, and restart would be
> performed by ExecStop -> ExecStart. However, the daemon has a bunch
> of nice code to do a better restart than that, and I'd need an
> ExecRestart to allow users to continue to take advantage of that.
>
> The daemon's "fast restart" code does all of the expensive startup
> operations in the new daemon first (e.g. parsing large data input),
> then signals the existing daemon to shut itself down, waits for it to
> release its critical resources (e.g. sockets, pidfile), and finally
> takes over those resources and finishes starting itself. Basically
> it's using the overlap to avoid long service downtimes during that
> initial parsing phase (and if that parsing fails, it leaves the old
> daemon running to boot).
>
> Is there some design reason that we can't have an ExecRestart command?
> Successful exit of that command would mean the old instance was
> killed (which systemd could confirm), and that the restart command has
> launched a new instance (which systemd can also figure out via PIDFile
> or guessing/cgroup). Failure exit of that command would mean the
> existing daemon instance was left alone (and again, systemd could
> confirm that state).
>
Which daemon is this ?
JBG
More information about the systemd-devel
mailing list