Don't use machinectl to shut down containers
If the host is shutting down, machinectl may fail because it's bus-activated and D-Bus will be shutting down. So just send a signal to the leader process directly. Fixes #6212.
This commit is contained in:
parent
e3c2b4ecbf
commit
307064ceb5
@ -203,7 +203,7 @@ in
|
|||||||
script =
|
script =
|
||||||
''
|
''
|
||||||
mkdir -p -m 0755 "$root/etc" "$root/var/lib"
|
mkdir -p -m 0755 "$root/etc" "$root/var/lib"
|
||||||
mkdir -p -m 0700 "$root/var/lib/private" "$root/root"
|
mkdir -p -m 0700 "$root/var/lib/private" "$root/root" /run/containers
|
||||||
if ! [ -e "$root/etc/os-release" ]; then
|
if ! [ -e "$root/etc/os-release" ]; then
|
||||||
touch "$root/etc/os-release"
|
touch "$root/etc/os-release"
|
||||||
fi
|
fi
|
||||||
@ -261,11 +261,21 @@ in
|
|||||||
ip route add $LOCAL_ADDRESS dev $ifaceHost
|
ip route add $LOCAL_ADDRESS dev $ifaceHost
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Get the leader PID so that we can signal it in
|
||||||
|
# preStop. We can't use machinectl there because D-Bus
|
||||||
|
# might be shutting down. FIXME: in systemd 219 we can
|
||||||
|
# just signal systemd-nspawn to do a clean shutdown.
|
||||||
|
machinectl show "$INSTANCE" | sed 's/Leader=\(.*\)/\1/;t;d' > "/run/containers/$INSTANCE.pid"
|
||||||
'';
|
'';
|
||||||
|
|
||||||
preStop =
|
preStop =
|
||||||
''
|
''
|
||||||
machinectl poweroff "$INSTANCE" || true
|
pid="$(cat /run/containers/$INSTANCE.pid)"
|
||||||
|
if [ -n "$pid" ]; then
|
||||||
|
kill -RTMIN+4 "$pid"
|
||||||
|
fi
|
||||||
|
rm -f "/run/containers/$INSTANCE.pid"
|
||||||
'';
|
'';
|
||||||
|
|
||||||
restartIfChanged = false;
|
restartIfChanged = false;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user