[Pkg-mailman-hackers] Bug#733475: Bug#733475: mailmanctl dies silently, messages delayed until intervention
Thijs Kinkhorst
thijs at debian.org
Sun Oct 30 17:45:28 UTC 2016
On Wed, October 12, 2016 17:37, Jan Niehusmann wrote:
> On Wed, Oct 12, 2016 at 03:21:13PM +0200, Jan Niehusmann wrote:
>> May it be that either needrestart or systemd calls the stop and start
>> rules directly, instead of using the restart rule?
>
> It looks like the way systemd calls the init script may be the issue,
> here:
>
> Systemd generates a unit file which contains:
>
> ExecStart=/etc/init.d/mailman start
> ExecStop=/etc/init.d/mailman stop
>
> (See /var/run/systemd/generator.late/mailman.service)
>
> There is no such thing like ExecRestart, so all systemd can do is first
> calling ExecStop and then calling ExecStart, if a restart is requested.
>
> Additionally, the documentation for ExecStop says:
>
> "Note that it is usually not sufficient to specify a command for this
> setting that only asks the service to terminate (for example, by queuing
> some form of termination signal for it), but does not wait for it to do
> so."
>
> https://www.freedesktop.org/software/systemd/man/systemd.service.html
>
> (It continues saying "Since the remaining processes of the services are
> killed using SIGKILL immediately after the command exited, this would
> not result in a clean stop.", which is not the issue we are having, but
> still, the command given in ExecStop should wait for the service to
> exit, to fulfil the expectations of systemd)
>
> Would it hurt to add the 'wait for termination' code found in the
> restart part of /etc/init.d/mailman to the stop part, as well? Like the
> following?
>
> stop)
> log_daemon_msg "Stopping Mailman master qrunner" "mailmanctl"
> PID=`cat $PIDFILE 2>/dev/null` || true
> $DAEMON -q stop
> if test -n "$PID" && kill -0 $PID 2>/dev/null ; then
> log_action_begin_msg "Waiting"
> for cnt in `seq 1 5`; do
> sleep 1
> kill -0 $PID 2>/dev/null || break
> done;
> if kill -0 $PID 2>/dev/null ; then
> log_end_msg 1
> else
> rm -f $PIDFILE
> log_end_msg 0
> fi
> else
> log_end_msg 0
> fi
> ;;
>
> Note that this is not really tested. Just copied from the restart
> section.
Thanks for the analysis.
I was wondering if we might not take a wholly different route, and that is
to replace the arguably complex init script with a systemd unit.
The most complex part is the checking for the site list. I believe we may
solve that at a different point, e.g. just create it upon first install
for example.
Cheers,
Thijs
More information about the Pkg-mailman-hackers
mailing list