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