X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=scripts%2Fvserver.stop;h=586addaaf079e4bf1afa75cf486d4b1413775a0e;hb=f32bc7966248cb1b9f3c535669db577cd022c369;hp=794ac5c5499840d4239dec30a10998ddcf471d18;hpb=2b8e0679960b50d6511b2ecde8b69afeb2f7402e;p=util-vserver.git diff --git a/scripts/vserver.stop b/scripts/vserver.stop index 794ac5c..586adda 100644 --- a/scripts/vserver.stop +++ b/scripts/vserver.stop @@ -48,6 +48,14 @@ trap "cleanup" EXIT OPTION_FORCE_SYNC=1 +while test "$#" -gt 0; do + case "$1" in + (--rescue-init) _IS_FAKEINIT=1;; + (--) shift; break;; + (-*) panic $"vserver ... stop: unknown option '$1'";; + esac +done + set -e generateOptions "$VSERVER_DIR" set +e @@ -66,24 +74,32 @@ fail= initWait "$VSERVER_DIR" "$S_CONTEXT" vwait_statdir if test -n "$_IS_FAKEINIT" && \ $_VSERVER_INFO - FEATURE vkill; then - $_VKILL -s INT --xid "$S_CONTEXT" -- 1 || fail=1 - ## HACK: remove the 'initpid' stuff above when PID virtualization - ## is implemented + if ! vshelper.isStopSync; then + $_VKILL -s INT --xid "$S_CONTEXT" -- 1 || fail=1 + fi elif $_VSERVER_INFO - FEATURE migrate; then "${NICE_CMD[@]}" \ - ${USE_VNAMESPACE:+$_VNAMESPACE --enter "$S_CONTEXT" -- } \ + "${CHBIND_CMD[@]}" \ + "$_VSPACE" --enter "$S_CONTEXT" "${OPTS_VSPACE[@]}" -- \ + "$_VTAG" --migrate "${OPTS_VTAG_ENTER[@]}" --silent -- \ $_VCONTEXT $SILENT_OPT --migrate --chroot --xid "$S_CONTEXT" -- \ "${INITCMD_STOP[@]}" || fail=1 else "${NICE_CMD[@]}" \ "$_CHBIND" "${CHBIND_OPTS[@]}" \ "$_EXEC_ULIMIT" "$VSERVER_DIR/ulimits" \ - ${USE_VNAMESPACE:+$_VNAMESPACE --enter "$S_CONTEXT"} \ $_CHCONTEXT_COMPAT "${CHCONTEXT_OPTS[@]}" \ "$_CAPCHROOT" "${CAPCHROOT_OPTS[@]}" "." \ "${INITCMD_STOP[@]}" || fail=1 fi +# Remove persistent so those contexts can be stopped +$_VATTRIBUTE --set --xid "$S_CONTEXT" --flag !persistent 2>/dev/null || : +if $_VSERVER_INFO -q "$N_CONTEXT" XIDTYPE static && + $_VSERVER_INFO - FEATURE vnet; then + $_NATTRIBUTE --set --nid "$N_CONTEXT" --flag !persistent 2>/dev/null || : +fi + vshelper.doStopSync waitForSync "$VSERVER_DIR" "$sync_fifo" "$vwait_statdir" @@ -96,7 +112,9 @@ sendKillSequence "$S_CONTEXT" "${INITKILL_SEQ[@]}" echo $"Vserver '$VSERVER_DIR' still running unexpectedly; please investigate it manually..." >&2 execScriptlets "$VSERVER_DIR" "$VSERVER_NAME" post-stop - + +handleDeviceMap --unset "$S_CONTEXT" "$VSERVER_DIR/apps/vdevmap" + umountVserver "$VSERVER_DIR" || : disableInterfaces "$VSERVER_DIR"