X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=scripts%2Fvserver.stop;fp=scripts%2Fvserver.stop;h=f1ac335931e5bc6926e23fbe66439523da83a5eb;hb=8cf13bb177d92c93eb73dc8939777150536c2d00;hp=0000000000000000000000000000000000000000;hpb=6bf3f95de36c804c97716b2d0bdf10680c559044;p=util-vserver.git diff --git a/scripts/vserver.stop b/scripts/vserver.stop new file mode 100644 index 0000000..f1ac335 --- /dev/null +++ b/scripts/vserver.stop @@ -0,0 +1,101 @@ +# $Id: vserver.stop,v 1.29 2005/06/30 06:17:58 ensc Exp $ --*- sh -*-- + +# Copyright (C) 2003 Enrico Scholz +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# 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 + 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 + +function cleanup +{ + set +e + unlock + + test ! -p "$sync_fifo" || { + $_RM -f "$sync_fifo" + $_RMDIR $($_DIRNAME "$sync_fifo") + } + + test ! -d "$vwait_statdir" || + $_RM -rf "$vwait_statdir" +} + +vwait_statdir= +vwait_pid= +sync_fifo= +trap "cleanup" EXIT + +OPTION_FORCE_SYNC=1 + +set -e +generateOptions "$VSERVER_DIR" +set +e + +vshelper.doDestroy "$VSERVER_DIR" "$S_CONTEXT" +initSync "$VSERVER_DIR" "$S_CONTEXT" sync_fifo +prepareStop "$VSERVER_DIR" + +cd "$VSERVER_DIR"/vdir/ +execScriptlets "$VSERVER_DIR" "$VSERVER_NAME" pre-stop +cd "$VSERVER_DIR"/vdir/ + +test -z "$OPTION_DEFAULTTTY" || setDefaultTTY "$VSERVER_DIR" + +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 +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[@]}" \ + "$_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" "$vwait_statdir" + +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 + +umountVserver "$VSERVER_DIR" || : +disableInterfaces "$VSERVER_DIR" + +execScriptlets "$VSERVER_DIR" "$VSERVER_NAME" postpost-stop