X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=util-vserver%2Fscripts%2Fvserver.stop;h=4100a9b5d09c602dd03e51e0da298dcb3117f08c;hb=27018b98ab81fc9bb8f6ea112045876ce61c2997;hp=347d2d4496f2ce4e101515c4e8af2eae5308d1e6;hpb=8c431d7d1ca26658e7dca0da7e0c3757432fd8c0;p=util-vserver.git diff --git a/util-vserver/scripts/vserver.stop b/util-vserver/scripts/vserver.stop index 347d2d4..4100a9b 100644 --- a/util-vserver/scripts/vserver.stop +++ b/util-vserver/scripts/vserver.stop @@ -15,26 +15,77 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +lock "$__LOCKDIR"/vserver."$($_VSERVER_INFO "$VSERVER_DIR" CANONIFY)".startup + if ! isVserverRunning "$VSERVER_DIR" S_CONTEXT; then - echo $"vserver '$VSERVER_NAME' is not running; aborting..." - umountVserver "$VSERVER_DIR" &>/dev/null || : - disableInterfaces "$VSERVER_DIR" &>/dev/null || : - exit 1 + warning $"vserver '$VSERVER_NAME' is not running" >&2 + test -n "$OPTION_DEBUG" || exec 2>/dev/null >/dev/null + umountVserver "$VSERVER_DIR" || : + disableInterfaces "$VSERVER_DIR" || : + unlock + exit 0 fi -generateOptions "$VSERVER_DIR" +function cleanup +{ + set +e + unlock + + test ! -p "$sync_fifo" || { + $_RM -f "$sync_fifo" + $_RMDIR $($_DIRNAME "$sync_fifo") + } +} +sync_fifo= +trap "cleanup" EXIT + +OPTION_FORCE_SYNC=1 + +set -e +generateOptions "$VSERVER_DIR" set +e -execScriptlets "$VSERVER_DIR" "$VSERVER_NAME" pre-stop +vshelper.doDestroy "$VSERVER_DIR" "$S_CONTEXT" +initSync "$VSERVER_DIR" sync_fifo +prepareStop "$VSERVER_DIR" + +cd "$VSERVER_DIR"/vdir/ +execScriptlets "$VSERVER_DIR" "$VSERVER_NAME" pre-stop cd "$VSERVER_DIR"/vdir/ -"${NICE_CMD[@]}" \ + +test -z "$OPTION_DEFAULTTTY" || setDefaultTTY "$VSERVER_DIR" + +fail= +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 +elif $_VSERVER_INFO - FEATURE migrate; then + "${NICE_CMD[@]}" \ + ${USE_VNAMESPACE:+$_VNAMESPACE --enter "$S_CONTEXT" -- } \ + $_VCONTEXT $SILENT_OPT --migrate --chroot --xid "$S_CONTEXT" -- \ + "${INITCMD_STOP[@]}" || fail=1 +else + "${NICE_CMD[@]}" \ "$_CHBIND" "${CHBIND_OPTS[@]}" \ - "$_CHCONTEXT" "${CHCONTEXT_OPTS[@]}" \ - "$_CAPCHROOT" "${CAPCHROOT_OPTS[@]}" . "${INITCMD_STOP[@]}" + "$_EXEC_ULIMIT" "$VSERVER_DIR/ulimits" \ + ${USE_VNAMESPACE:+$_VNAMESPACE --enter "$S_CONTEXT"} \ + $_CHCONTEXT_COMPAT "${CHCONTEXT_OPTS[@]}" \ + "$_CAPCHROOT" "${CAPCHROOT_OPTS[@]}" "." \ + "${INITCMD_STOP[@]}" || fail=1 +fi + +test -n "$fail" || waitForSync "$VSERVER_DIR" "$sync_fifo" + +vshelper.doDestroy "$VSERVER_DIR" "$S_CONTEXT" +sendKillSequence "$S_CONTEXT" "${INITKILL_SEQ[@]}" -"${INITCMD_STOP_SYNC[@]}" -"$_CTX_KILL" -c "$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