Bug#960594: systemd: services (bind9, squid) are started before their filesystems had been mounted
Michael Biebl
biebl at debian.org
Tue May 19 17:38:26 BST 2020
Hi Wladimir
Am 19.05.20 um 15:25 schrieb Wladimir Mutel:
> --- a/resolvconf/update.d/bind
> +++ b/resolvconf/update.d/bind
> @@ -101,6 +101,6 @@ if [ -x /usr/bin/diff ] && [ -f "$DYNAMIC_OPTS_FILE"
> ] && /usr/bin/diff -q "$DYN
> rm -f "$TMP_FILE"
> else
> mv -f "$TMP_FILE" "$DYNAMIC_OPTS_FILE"
> - [ -x /etc/init.d/bind9 ] && /etc/init.d/bind9 reload > /dev/null
> 2>&1 || :
> +# [ -x /etc/init.d/bind9 ] && /etc/init.d/bind9 reload > /dev/null
Could you restore the original (i.e. undo all the changes I asked you to
do) and copy the attached file to /lib/lsb/init-functions.d/40-systemd
Please report back if that fixes your problem (and/or if you encountered
new problems)
-------------- next part --------------
# -*-Shell-script-*-
# /lib/lsb/init-functions
_use_systemctl=0
if [ -d /run/systemd/system ]; then
if [ -n "${__init_d_script_name:-}" ]; then # scripts run with new init-d-script
executable="$__init_d_script_name"
argument="$1"
elif [ "${0##*/}" = "init-d-script" ] ||
[ "${0##*/}" = "${1:-}" ]; then # scripts run with old init-d-script
executable="$1"
argument="$2"
else # plain old scripts
executable="$0"
argument="${1:-}"
fi
prog=${executable##*/}
service="${prog%.sh}.service"
# Don't try to run masked services. systemctl <= 230 always succeeds here,
# but later systemctls fail on nonexisting units; be compatible with both
state=$(systemctl -p LoadState --value show $service 2>/dev/null) || state="not-found"
[ "$state" = "masked" ] && exit 0
# Redirect SysV init scripts when executed by the user
if [ $PPID -ne 1 ] && [ -z "${SYSTEMCTL_SKIP_REDIRECT:-}" ]; then
case $(readlink -f "$executable") in
/etc/init.d/*)
# If the state is not-found, this might be a newly installed SysV init
# script where systemd-sysv-generator has not been run yet.
[ "$state" != "not-found" ] || [ "$(id -u)" != 0 ] || systemctl --no-ask-password daemon-reload
_use_systemctl=1
# Some services can't reload through the .service file,
# but can through the init script.
if [ "$(systemctl -p CanReload --value show $service 2>/dev/null)" = "no" ] && [ "${argument:-}" = "reload" ]; then
_use_systemctl=0
fi
;;
esac
fi
fi
systemctl_redirect () {
local s
local rc
local prog=${1##*/}
local command=$2
case "$command" in
start)
s="Starting $prog (via systemctl)"
;;
stop)
s="Stopping $prog (via systemctl)"
;;
reload|force-reload)
s="Reloading $prog configuration (via systemctl)"
;;
try-restart)
s="Restarting $prog if running (via systemctl)"
;;
restart)
s="Restarting $prog (via systemctl)"
;;
esac
service="${prog%.sh}.service"
# avoid deadlocks during bootup and shutdown from units/hooks
# which call "invoke-rc.d service reload" and similar, since
# the synchronous wait plus systemd's normal behaviour of
# transactionally processing all dependencies first easily
# causes dependency loops
state=$(systemctl is-system-running 2>/dev/null)
if [ $? -ne 0 ] && [ "$state" != "degraded" ]; then
if [ "$command" = "reload" ]; then
sctl_args="--no-block"
else
sctl_args="--job-mode=ignore-dependencies"
fi
fi
[ "$command" = status ] || log_daemon_msg "$s" "$service"
/bin/systemctl --no-pager $sctl_args $command "$service"
rc=$?
[ "$command" = status ] || log_end_msg $rc
return $rc
}
if [ "$_use_systemctl" = "1" ]; then
# Some init scripts use "set -e" and "set -u", we don't want that
# here
set +e
set +u
case "$argument" in
start|stop|restart|reload|force-reload|try-restart|status)
systemctl_redirect $executable $argument
exit $?
;;
esac
fi
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <http://alioth-lists.debian.net/pipermail/pkg-systemd-maintainers/attachments/20200519/11cbc767/attachment.sig>
More information about the Pkg-systemd-maintainers
mailing list