[Pkg-mailman-hackers] Bug#884330: Bug#884330: mailman3-suite: sysv init fails restart for various reasons
Jonas Meurer
jonas at freesources.org
Thu Dec 14 09:53:11 UTC 2017
Hi Stephen,
Am 14.12.2017 um 01:14 schrieb Stephen Rothwell:
> The sysv init script will fail to do a stop or restart:
Thanks a lot for all the bugreports regarding the init script. As you
might have seen, the initscript didn't get much testing yet. PEB and me
both use systemd and it seems like we neglected the sysvinit script.
>
> --die-on-term is passed to uwsgi, so a TERM signal is needed
> to stop it instead of HUP
That's a valid point. I now looked into the sysvinit script
uswgi-core[1] again as reference and it uses '--retry=QUIT/30/KILL/5'.
> uwsgi takes some time to terminate, so a following start may fail
> if it is still stopping
> stop sill fail if uwsgi is not actually running (which makes
> restart fail)
>
> To fix all this, I changed do_stop to do:
>
> start-stop-daemon --stop --quiet --oknodo --retry forever/TERM/5 \
> --pidfile $PIDFILE --exec $DAEMON
>
> The "forever" may not be a good choice ... maybe "TERM/5/KILL/5" or
> some such would be better. And 5 seconds may also not be a good choice,
> but it seems to work fairly well on my setup.
I don't like to use 'forever'. Something like 'QUIT/30/KILL/5' looks way
better: It sends the 'QUIT' signal, waits for 30 seconds and then sends
the KILL signal (waiting for 5 seconds). If neither succeeds, the stop
process fails. That seems sensible to me.
> I am also not sure that the {forced-}reload actions are going to work.
Indeed, I updated them as well according to the uwsgi-core sysvinit
script[1].
Could you give that attached updated init script a try and report back?
Please test all of the start/stop/restart/reload/force-reload functions.
> Also, maybe start-stop-daemon is not needed for uwsgi as it seems to do
> its own process management?
Not sure about that. The uwsgi package uses start-stop-daemon as well.
As that's the common way to handle daemons with sysvinit in Debian, I
think we should stick to it.
Cheers
jonas
[1]
https://sources.debian.org/src/uwsgi/2.0.15-10/debian/uwsgi-core.init.d.custom/
-------------- next part --------------
#!/bin/sh
### BEGIN INIT INFO
# Provides: mailman3-suite
# Required-Start: $network $local_fs $remote_fs $syslog
# Required-Stop: $remote_fs
# Should-Start: postgresql
# Should-Stop: postgresql
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Mailman3 suite uWSGI service
# Description: Mailman3 suite uWSGI service
### END INIT INFO
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
NAME="mailman3-suite"
DESC="Mailman3 suite uWSGI service"
SCRIPTNAME=/etc/init.d/mailman3-suite
DAEMON=/usr/bin/uwsgi
PIDFILE="/run/mailman3-suite/${NAME}.pid"
LOGFILE="/var/log/mailman3/mailman3-suite.log"
DAEMON_ARGS="--ini /usr/share/mailman3-suite/uwsgi.ini --die-on-term --pidfile ${PIDFILE} --daemonize ${LOGFILE}"
test -x $DAEMON || exit 0
. /lib/lsb/init-functions
if [ ! -d /run/mailman3-suite ]; then
mkdir -p /run/mailman3-suite
fi
chown www-data:www-data /run/mailman3-suite
do_start () {
start-stop-daemon --start --quiet --pidfile $PIDFILE \
--exec $DAEMON --test >/dev/null|| return 1
start-stop-daemon --start --quiet --pidfile $PIDFILE \
--exec $DAEMON -- $DAEMON_ARGS || return 2
}
do_stop () {
start-stop-daemon --stop --quiet --oknodo --retry=QUIT/30/KILL/5 \
--pidfile $PIDFILE --exec $DAEMON
}
do_reload () {
start-stop-daemon --stop --quiet --signal=HUP \
--pidfile $PIDFILE --exec $DAEMON
RETVAL="$?"
# There is no such process, nothing to reload!
[ "$RETVAL" = 1 ] && RETVAL=3
return "$RETVAL"
}
do_force_reload() {
start-stop-daemon --stop --quiet \
--signal=TERM \
--pidfile $PIDFILE \
--exec $DAEMON
RETVAL="$?"
# There is no such process, nothing to reload!
[ "$RETVAL" = 1 ] && RETVAL=3
return "$RETVAL"
}
case "$1" in
start)
log_daemon_msg "Starting $DESC" "$NAME"
do_start
log_end_msg "$?"
;;
stop)
log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
log_end_msg "$?"
;;
status)
status_of_proc -p "$PIDFILE" "$DAEMON" "$NAME" \
&& exit 0 || exit $?
;;
reload)
log_daemon_msg "Reloading $DESC" "$NAME"
do_reload
log_end_msg "$?"
;;
force-reload)
log_daemon_msg "Forced reloading $DESC" "$NAME"
do_force_reload
log_end_msg "$RETVAL"
;;
restart)
log_daemon_msg "Restarting $DESC" "$NAME"
do_stop
case "$?" in
0)
do_start
log_end_msg "$?"
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|status|restart|reload|force-reload}" >&2
exit 3
;;
esac
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 866 bytes
Desc: OpenPGP digital signature
URL: <http://lists.alioth.debian.org/pipermail/pkg-mailman-hackers/attachments/20171214/21076346/attachment-0001.sig>
More information about the Pkg-mailman-hackers
mailing list