X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=util-vserver%2Fscripts%2Fvserver.stop;h=82e7aa6cc6ddfeeb4a185b6097fe5cf049e277d7;hb=95cf3519da76f335389cd7a18d0090b59f81f2e7;hp=8ebdf9019d5858779a47e39312b17ed00f512e67;hpb=996982ec36d2db18489dce2a00951fbece220bb7;p=util-vserver.git diff --git a/util-vserver/scripts/vserver.stop b/util-vserver/scripts/vserver.stop index 8ebdf90..82e7aa6 100644 --- a/util-vserver/scripts/vserver.stop +++ b/util-vserver/scripts/vserver.stop @@ -17,24 +17,46 @@ if ! isVserverRunning "$VSERVER_DIR" S_CONTEXT; then echo $"vserver '$VSERVER_NAME' is not running; aborting..." >&2 - umountVserver "$VSERVER_DIR" &>/dev/null || : - disableInterfaces "$VSERVER_DIR" &>/dev/null || : + test "$OPTION_DEBUG" || exec 2>/dev/null >/dev/null + umountVserver "$VSERVER_DIR" || : + disableInterfaces "$VSERVER_DIR" || : exit 1 fi +function cleanup +{ + test ! -p "$sync_fifo" || { + rm -f "$sync_fifo" + rmdir $(dirname "$sync_fifo") + } +} + +sync_fifo= +trap "cleanup" EXIT + set -e generateOptions "$VSERVER_DIR" set +e +vshelper.doDestroy "$VSERVER_DIR" "$S_CONTEXT" +initSync "$VSERVER_DIR" sync_fifo + cd "$VSERVER_DIR"/vdir/ execScriptlets "$VSERVER_DIR" "$VSERVER_NAME" pre-stop - cd "$VSERVER_DIR"/vdir/ -if $_VSERVER_INFO - FEATURE migrate; then +test -z "$OPTION_DEFAULTTTY" || setDefaultTTY + +fail= +if test "$_IS_FAKEINIT" && \ + $_VSERVER_INFO - FEATURE vkill && \ + initpid=$($_VSERVER_INFO "$S_CONTEXT" INITPID 2>/dev/null); then + $_VKILL -s INT -- "$initpid" || fail=1 +elif $_VSERVER_INFO - FEATURE migrate; then + "${NICE_CMD[@]}" \ ${USE_VNAMESPACE:+$_VNAMESPACE --enter "$S_CONTEXT" -- } \ $_VCONTEXT $SILENT_OPT --migrate --chroot --xid "$S_CONTEXT" -- \ - "${INITCMD_STOP[@]}" && "${INITCMD_STOP_SYNC[@]}" || : + "${INITCMD_STOP[@]}" || fail=1 else "${NICE_CMD[@]}" \ "$_CHBIND" "${CHBIND_OPTS[@]}" \ @@ -42,10 +64,17 @@ else ${USE_VNAMESPACE:+$_VNAMESPACE --enter "$S_CONTEXT"} \ $_CHCONTEXT_COMPAT "${CHCONTEXT_OPTS[@]}" \ "$_CAPCHROOT" "${CAPCHROOT_OPTS[@]}" "." \ - "${INITCMD_STOP[@]}" && "${INITCMD_STOP_SYNC[@]}" || : + "${INITCMD_STOP[@]}" || fail=1 fi -sendKillSequence "$S_CONTEXT" "${INITKILL_SEQ[@]}" +test "$fail" || waitForSync "$VSERVER_DIR" "$sync_fifo" + +vshelper.doDestroy "$VSERVER_DIR" "$S_CONTEXT" +sendKillSequence "$S_CONTEXT" "${INITKILL_SEQ[@]}" + +## Small hack... isVserverRunning removes stale runfiles as a sideeffect +! isVserverRunning "$VSERVER_DIR" || \ + echo $"Vserver '$VSERVER_DIR' still running unexpectedly; please investigate it manually..." >&2 execScriptlets "$VSERVER_DIR" "$VSERVER_NAME" post-stop