how to make systemd wait for a process to die?

Lennart Poettering mzerqung at 0pointer.de
Mon Sep 19 17:31:16 UTC 2011


On Mon, 19.09.11 19:28, Lennart Poettering (mzerqung at 0pointer.de) wrote:

> 
> On Mon, 19.09.11 13:25, Juan Orti Alcaine (j.orti.alcaine at gmail.com) wrote:
> 
> > Hello, I'm making a systemd service file for gogoc, a program to create IPv6
> > tunnels with Freenet6.net
> > 
> > The program gets the network configuration and uses a shell script for
> > configuring the interface, and when receives the HUP signal, calls the shell
> > script again for shutting down the tunnel, but it needs a few seconds for
> > doing this.
> > 
> > What's the better way for doing this? at the moment, I do:
> > 
> > [Service]
> > WorkingDirectory=/var/lib/gogoc
> > Type=simple
> > EnvironmentFile=-/etc/sysconfig/gogoc
> > ExecStart=/usr/bin/gogoc -f /etc/gogoc/gogoc.conf $GOGOC_OPTS
> > ExecStop=/bin/kill -s SIGHUP $MAINPID
> > 
> > it sends the HUP, but then it kills the daemon immediately, there's no time
> > for shutting down the tunnel properly.
> > Is correct to put a sleep? It looks awful
> > ExecStop=/bin/kill -s SIGHUP $MAINPID; sleep 5
> 
> > What do you think?
> 
> ExecStop is supposed to synchronously shut down a service. It's the same
> for SysV's "stop" verb. 
> 
> I must say I find it quite a poort choice of this software to use SIGHUP
> for termination. They should use SIGSTOP for that, as the generally
> accepted default meaning for SIGHUP for daemons is to reload
> configuration.
> 
> Note that by default systemd sends SIGSTOP to all processes of a service
> and waits for a while to ensure the service shuts down. You can
> influence the signal sent via KillSignal=. See systemd.service(5) for
> more information.

Mehh, s/SIGSTOP/SIGTERM/. Sorry for the confusion.

Lennart

-- 
Lennart Poettering - Red Hat, Inc.


More information about the devel mailing list