| 1 |
|
|---|
| 2 |
|
|---|
| 3 |
|
|---|
| 4 |
|
|---|
| 5 |
|
|---|
| 6 |
|
|---|
| 7 |
|
|---|
| 8 |
|
|---|
| 9 |
|
|---|
| 10 |
|
|---|
| 11 |
|
|---|
| 12 |
|
|---|
| 13 |
|
|---|
| 14 |
|
|---|
| 15 |
|
|---|
| 16 |
|
|---|
| 17 |
|
|---|
| 18 |
|
|---|
| 19 |
lock "$__LOCKDIR"/vserver."$($_VSERVER_INFO "$VSERVER_DIR" CANONIFY)".startup |
|---|
| 20 |
|
|---|
| 21 |
if ! isVserverRunning "$VSERVER_DIR" S_CONTEXT; then |
|---|
| 22 |
warning $"vserver '$VSERVER_NAME' is not running" >&2 |
|---|
| 23 |
test -n "$OPTION_DEBUG" || exec 2>/dev/null >/dev/null |
|---|
| 24 |
umountVserver "$VSERVER_DIR" || : |
|---|
| 25 |
disableInterfaces "$VSERVER_DIR" || : |
|---|
| 26 |
unlock |
|---|
| 27 |
exit 0 |
|---|
| 28 |
fi |
|---|
| 29 |
|
|---|
| 30 |
function cleanup |
|---|
| 31 |
{ |
|---|
| 32 |
set +e |
|---|
| 33 |
unlock |
|---|
| 34 |
|
|---|
| 35 |
test ! -p "$sync_fifo" || { |
|---|
| 36 |
$_RM -f "$sync_fifo" |
|---|
| 37 |
$_RMDIR $($_DIRNAME "$sync_fifo") |
|---|
| 38 |
} |
|---|
| 39 |
|
|---|
| 40 |
test ! -d "$vwait_statdir" || |
|---|
| 41 |
$_RM -rf "$vwait_statdir" |
|---|
| 42 |
} |
|---|
| 43 |
|
|---|
| 44 |
vwait_statdir= |
|---|
| 45 |
vwait_pid= |
|---|
| 46 |
sync_fifo= |
|---|
| 47 |
trap "cleanup" EXIT |
|---|
| 48 |
|
|---|
| 49 |
OPTION_FORCE_SYNC=1 |
|---|
| 50 |
|
|---|
| 51 |
while test "$#" -gt 0; do |
|---|
| 52 |
case "$1" in |
|---|
| 53 |
(--rescue-init) shift; _IS_FAKEINIT=1;; |
|---|
| 54 |
(--) shift; break;; |
|---|
| 55 |
(-*) panic $"vserver ... stop: unknown option '$1'";; |
|---|
| 56 |
esac |
|---|
| 57 |
done |
|---|
| 58 |
|
|---|
| 59 |
set -e |
|---|
| 60 |
generateOptions "$VSERVER_DIR" |
|---|
| 61 |
set +e |
|---|
| 62 |
|
|---|
| 63 |
vshelper.doDestroy "$VSERVER_DIR" "$S_CONTEXT" |
|---|
| 64 |
initSync "$VSERVER_DIR" "$S_CONTEXT" sync_fifo |
|---|
| 65 |
prepareStop "$VSERVER_DIR" |
|---|
| 66 |
|
|---|
| 67 |
cd "$VSERVER_DIR"/vdir/ |
|---|
| 68 |
execScriptlets "$VSERVER_DIR" "$VSERVER_NAME" pre-stop |
|---|
| 69 |
cd "$VSERVER_DIR"/vdir/ |
|---|
| 70 |
|
|---|
| 71 |
test -z "$OPTION_DEFAULTTTY" || setDefaultTTY "$VSERVER_DIR" |
|---|
| 72 |
|
|---|
| 73 |
$_VATTRIBUTE --set --xid "$S_CONTEXT" --flag !SC_HELPER |
|---|
| 74 |
|
|---|
| 75 |
fail= |
|---|
| 76 |
initWait "$VSERVER_DIR" "$S_CONTEXT" vwait_statdir |
|---|
| 77 |
if test -n "$_IS_FAKEINIT" && \ |
|---|
| 78 |
$_VSERVER_INFO - FEATURE vkill; then |
|---|
| 79 |
if ! vshelper.isStopSync; then |
|---|
| 80 |
$_VKILL -s INT --xid "$S_CONTEXT" -- 1 || fail=1 |
|---|
| 81 |
fi |
|---|
| 82 |
elif $_VSERVER_INFO - FEATURE migrate; then |
|---|
| 83 |
"${IONICE_CMD[@]}" \ |
|---|
| 84 |
"${NICE_CMD[@]}" \ |
|---|
| 85 |
"${CHBIND_CMD[@]}" \ |
|---|
| 86 |
"$_VSPACE" --enter "$S_CONTEXT" "${OPTS_VSPACE[@]}" -- \ |
|---|
| 87 |
"$_VTAG" --migrate "${OPTS_VTAG_ENTER[@]}" --silent -- \ |
|---|
| 88 |
$_VCONTEXT $SILENT_OPT --migrate $OPT_VCONTEXT_CHROOT --xid "$S_CONTEXT" -- \ |
|---|
| 89 |
"${INITCMD_STOP[@]}" || fail=1 |
|---|
| 90 |
else |
|---|
| 91 |
"${IONICE_CMD[@]}" \ |
|---|
| 92 |
"${NICE_CMD[@]}" \ |
|---|
| 93 |
"${CHBIND_CMD[@]}" \ |
|---|
| 94 |
"$_EXEC_ULIMIT" "$VSERVER_DIR/ulimits" \ |
|---|
| 95 |
$_CHCONTEXT_COMPAT "${CHCONTEXT_OPTS[@]}" \ |
|---|
| 96 |
"$_CAPCHROOT" "${CAPCHROOT_OPTS[@]}" "." \ |
|---|
| 97 |
"${INITCMD_STOP[@]}" || fail=1 |
|---|
| 98 |
fi |
|---|
| 99 |
|
|---|
| 100 |
|
|---|
| 101 |
$_VATTRIBUTE --set --xid "$S_CONTEXT" --flag !persistent 2>/dev/null || : |
|---|
| 102 |
if $_VSERVER_INFO -q "$N_CONTEXT" XIDTYPE static && |
|---|
| 103 |
$_VSERVER_INFO - FEATURE vnet; then |
|---|
| 104 |
$_NATTRIBUTE --set --nid "$N_CONTEXT" --flag !persistent 2>/dev/null || : |
|---|
| 105 |
fi |
|---|
| 106 |
|
|---|
| 107 |
vshelper.doStopSync |
|---|
| 108 |
|
|---|
| 109 |
waitForSync "$VSERVER_DIR" "$sync_fifo" "$vwait_statdir" |
|---|
| 110 |
|
|---|
| 111 |
vshelper.doDestroy "$VSERVER_DIR" "$S_CONTEXT" |
|---|
| 112 |
sendKillSequence "$S_CONTEXT" "${INITKILL_SEQ[@]}" |
|---|
| 113 |
|
|---|
| 114 |
|
|---|
| 115 |
! isVserverRunning "$VSERVER_DIR" || \ |
|---|
| 116 |
echo $"Vserver '$VSERVER_DIR' still running unexpectedly; please investigate it manually..." >&2 |
|---|
| 117 |
|
|---|
| 118 |
execScriptlets "$VSERVER_DIR" "$VSERVER_NAME" post-stop |
|---|
| 119 |
|
|---|
| 120 |
handleDeviceMap --unset "$S_CONTEXT" "$VSERVER_DIR/apps/vdevmap" |
|---|
| 121 |
|
|---|
| 122 |
umountVserver "$VSERVER_DIR" || : |
|---|
| 123 |
disableInterfaces "$VSERVER_DIR" |
|---|
| 124 |
|
|---|
| 125 |
saveDiskLimits "$VSERVER_DIR" |
|---|
| 126 |
|
|---|
| 127 |
execScriptlets "$VSERVER_DIR" "$VSERVER_NAME" postpost-stop |
|---|
| 128 |
removeCPUSET "$VSERVER_DIR" |
|---|
| 129 |
destroyCgroup "$VSERVER_DIR" |
|---|